1. 程式人生 > >ssh服務以及OpenSSLssh

ssh服務以及OpenSSLssh

其他 log lse xxxxx pri 批量下載 批量 客戶端 pen

ssh軟件由兩部分組成:ssh服務端和ssh客戶端。

  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 identification has been saved in /root/.ssh/id_rsa.
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