ssh服務以及OpenSSLssh
ssh的配置文件在/etc/ssh/目錄下,其中服務端的配置文件是sshd_config,客戶端的配置文件是ssh_config.
安裝ssh,在這裏,只講述通過yum安裝的方法(前提是你的yum源配置正確,並且能使用):
yum install openssh-* -y yum會自動安裝所有openssh相關的軟件包
配置ssh服務器
根據ssh的兩種驗證方式,配置兩種不能安全級別的登錄方式。
·通過口令驗證方式登錄
1.用vim編輯器打開sshd_config配置文件
vim /etc/ssh/sshd_config
2.對配置文件進行如下修改
Port 22 //默認使用22端口,也可以自行修改為其他端口,但登錄時要打上端口號
#ListenAddress //指定提供ssh服務的IP,這裏我註釋掉。
PermitRootLogin //禁止以root遠程登錄
PasswordAuthentication yes //啟用口令驗證方式
PermitEmptyPassword //禁止使用空密碼登錄
LoginGraceTime 1m //重復驗證時間為1分鐘
MaxAuthTimes 3 //最大重試驗證次數
保存修改好的配置,退出。
3.重啟sshd服務
service sshd restart
通過密鑰對驗證方式登錄
1.在客戶端生成密鑰對
註:生成密鑰對前,需切換相應用戶身份。例如:當user1需要登錄到服務端時,user1必須在客戶端生成自己的密鑰文件。其他用戶也一樣。
#su - user1
#ssh-keygen -t rsa //生成密鑰文件
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): //按回車
Enter passphrase (empty for no passphrase): //設置保護私鑰文件的密碼,即密鑰登錄時的密碼
Enter same passphrase again: //再次輸入保護私鑰文件的密碼
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
33:ee:01:7d:c3:74:83:13:ef:67:ee:d7:60:2d:e1:16 root@localhost
#ll -a .ssh/
drwxrwxrwx 2 root root 4096 10-08 19:29 .
drwxr-x--- 21 root root 4096 10-08 19:25
-rw------- 1 root root 1743 10-08 19:29 id_rsa //創建的私鑰
-rw-r--r-- 1 root root 396 10-08 19:29 id_rsa.pub //創建的公鑰
-rw-r--r-- 1 root root 790 2015-11-04 known_hosts
2.上傳公鑰文件到服務器或者用U盤拷貝到服務器裏
#scp .ssh/id_rsa.pub [email protected]:/home/user1/
3.在服務器端,將公鑰文件添加到相應用戶的密鑰庫裏
mkdir -p /home/user1/.ssh/ //註意,這裏創建的。ssh目錄權限必需是除自己外,對其他用戶只讀,也就是權限位設置為644,所屬者與所屬者組都是其用戶
mv /home/user1/id_rsa.pub /home/user1/,ssh/authorized_keys //由於生成的公鑰名稱與指定的公鑰名稱不符,因此需要將生成的文件名換成authorized_keys即可。
4.修改sshd_config配置文件
vim /etc/ssh/sshd_config
PasswordAuthentication no //禁用口令驗證方式,不能把原有的PasswordAuthentication yes註釋掉,註釋後,就算沒有公鑰也能通過口令登錄,這樣不安全,而且失去了密鑰驗證的意義。
RSAAuthentication yes //啟用RSA驗證
PubkeyAuthentication yes //啟用公鑰驗證
AuthorizedKeysFile .ssh/authorized_keys //啟用公鑰文件位置,後面的路徑是設置公鑰存放文件的位置
保存修改好的配置,退出。sshd_config配置文件[點擊打開鏈接
5.重啟sshd服務
#service sshd restart
sftp命令
交互式文件傳輸工具
用法和傳統的ftp工具相似
利用ssh服務實現安全的文件上傳和下載
使用ls cd mkdir rmdir pwd get put等指令,可用?或help獲取幫助信息
sftp [user@]host
pssh工具
pssh是一款開源的軟件,使用python實現,用於批量ssh操作大批量機器;pssh是一個可以在多臺服務器上執行命令的工具,同時支持拷貝文件,是同類工具中很出色的;比起for循環的做法,我更推薦使用pssh!使用pssh的前提是:必須在本機與其他服務器上配置好密鑰認證訪問(即ssh信任關系)。
1)安裝pssh
可以yum直接安裝:
[root@bastion-IDC ~]# yum install -y pssh
2)pssh用法
[root@bastion-IDC ~]# pssh --help
-h 執行命令的遠程主機列表文件
-H user@ip:port 文件內容格式[user@]host[:port]
-l 遠程機器的用戶名
-p 一次最大允許多少連接
-o 輸出內容重定向到一個文件
-e 執行錯誤重定向到一個文件
-t 設置命令執行的超時時間
-A 提示輸入密碼並且把密碼傳遞給ssh(註意這個參數添加後只是提示作用,隨便輸入或者不輸入直接回車都可以)
-O 設置ssh參數的具體配置,參照ssh_config配置文件
-x 傳遞多個SSH 命令,多個命令用空格分開,用引號括起來
-X 同-x 但是一次只能傳遞一個命令
-i 顯示標準輸出和標準錯誤在每臺host執行完畢後
-I 讀取每個輸入命令,並傳遞給ssh進程 允許命令腳本傳送到標準輸入
3)pssh實例說明
cat hosts.txt //列表文件內的信息格式是“ip:端口”,如果本機和遠程機器使用的ssh端口一致,則可以省去端口,直接用ip就行。不過建議還是將端口都帶上為好。
192.168.1.101:22
192.168.1.109:22
192.168.1.118:25791
192.168.1.105:25791
如上四臺機器放在一個列表文件hosts.txt內,本機已經和這四臺機器做了ssh無密碼登陸的信任關系
註意:列表文件內的機器必須提前和本機做好ssh信任關系,如果沒有做的話,那麽pssh批量執行時,輪到這臺沒有做信任關系的機器時就不會執行
a)批量執行命令
[root@bastion-IDC ~]# pssh -h hosts.txt -l root -i ‘uptime‘
如果添加-A參數,那麽即使提前做了ssh信任關系,還是會提示輸入密碼!
[root@bastion-IDC ~]# pssh -h hosts.txt -l root -i -A ‘uptime‘
Warning: do not enter your password if anyone else has superuser
privileges or access to your account.
Password: //註意這個參數添加後只是提示作用,可以在此隨便輸入或者不輸入直接回車都可以
b)批量上傳文件或目錄(pscp.pssh命令)
1.批量上傳本地文件/mnt/test.file到遠程服務器上的/tmp目錄:
pscp.pssh -l root -h hosts.txt /mnt/test.file /tmp/
2.批量上傳本地文件/mnt/test.file、/mnt/aa.file、/mnt/bb.file到遠程服務器上的/tmp目錄:
pscp.pssh -l root -h hosts.txt /mnt/test.file /mnt/aa.file /mnt/bb.file /tmp/或者
pscp.pssh -l root -h hosts.txt /mnt/{test.file,aa.file,bb.file} /tmp/
3.批量上傳本地目錄/mnt/zhong到遠程服務器上的/tmp目錄(上傳目錄需要添加-r參數):
pscp.pssh -l root -h hosts.txt -r /mnt/zhong /tmp/
c)批量下載文件或目錄(pslurp命令)
1.批量下載服務器上的某文件到本地,不用擔心重名問題,因為pssh已經建立了以文件列表內的ip為名稱的目錄來存放下載的文件:
pslurp -l root -h hosts.txt /etc/hosts
另外特別註意:
上面的批量下載操作,只能下載到本地的當前目錄下,不能在命令中跟指定的路徑:
2.pslurp -l root -h hosts.txt /etc/hosts /mnt/
3.要想下載到本機的/mnt目錄下,正確的做法是先切換到/mnt目錄下,然後再執行下載命令:(列表文件要跟全路徑)**
cd /mnt/
pslurp -l root -h /root/hosts.txt /etc/hosts ./
4.上面是批量下載文件,要是批量下載目錄,只需要添加一個-r參數即可!
pslurp -l root -h /root/hosts.txt -r /home/ ./
d)批量同步(prsync命令)
1.同步本機/mnt/test目錄下的文件或目錄到遠程機器的/mnt/test路徑下
prsync -l root -h hosts.txt -r /mnt/test/ /mnt/test/
2.同步本機/mnt/test目錄下的文件或目錄到遠程機器的/mnt路徑下
prsync -l root -h hosts.txt -r /mnt/test/ /mnt/
註意:
上面批量同步目錄操作是將本機對應目錄數據同步到遠程機器上,遠程機器上對於目錄下多余的文件也會保留(不會刪除多余文件)
同理,批量同步文件操作,去掉-r參數,
註意:同步文件的時候,其實就是完全覆蓋,遠程機器對應文件內的文件會被全部替換!
3.同步本機的/mnt/test/file文件內容到遠程服務器/mnt/test/file文件內
prsync -l root -h hosts.txt /mnt/test/file /mnt/test/file
e)批量kill遠程機器上的進程(pnuke命令)
比如批量kill掉遠程機器上的nginx進程
pnuke -h hosts.txt -l root nginx
SSH端口轉發
1、創建iptables,拒絕 192.168.30.69 連接 192.168.30.75
2、啟用 192.168.30.75 上的 telnet 服務端口
本地端口轉發
本地主機是192.168.30.69
語法:ssh -L 本地端口:目標主機地址:目標端口 SSH服務器地址
選項:
-f 後臺啟用
-N 不打開遠程shell,處於等待狀態
-g 啟用網關功能
轉發過程:data<->localhost:1024<->localhost:XXXXX<->sshsrv:22 <->sshsrv:YYYYY<->telnetsrv:23
遠程端口轉發
本地主機是192.168.30.74
語法:ssh -R 遠程端口:目標主機地址:目標端口 SSH服務器地址
轉發過程:data<->sshsrv:1024<->sshsrv:22<->localhost:XXXXX<->localhost:YYYYY<->telnetsrv:23
ssh服務以及OpenSSLssh