SSH實現雙向認證
由於經常需要使用scp在兩台機器間拷貝文件,每次都輸入密碼太麻煩,於是按下面的步驟配置了一下,再使用ssh或scp登錄遠程機器時就不需輸入密碼了:
A主機:192.168.100.82 B主機:192.168.100.83
Linux/Unix雙機建立信任
1.在A機生成證書
在A機root用戶或其他用戶下執行ssh-keygen命令,在需要輸入的地方,直接回車,生成建立安全信任關系的證書。
[root@localhost ~]#ssh-keygen -t rsa
注意:在程序提示輸入passphrase時直接輸入回車,表示無證書密碼。
上述命令將生成私鑰證書id_rsa和公鑰證書id_rsa.pub,存放在用戶家目錄的.ssh子目錄中.
2.查看~/.ssh生成密鑰的文件
[root@localhost ~]# ll /root/.ssh/ total 8 -rw------- 1 root root 1675 Apr 27 15:55 id_rsa -rw-r--r-- 1 root root 400 Apr 27 15:55 id_rsa.pub
3.A對B建立信任關系
將A主機的公鑰證書id_rsa.pub復制到機器B主機的root家目錄的.ssh子目錄中,同時將文件名更換為authorized_keys,此時需要輸入B主機的root用戶密碼(還未建立信任關系)。建立了客戶端到服務器端的信任關系后,客戶端就可以不用再輸入密碼,就可以從服務器端拷貝數據了。
scp -r -P 22 /root/.ssh/id_rsa.pub root@192.168.100.83:/root/.ssh/authorized_keys
如果做單向認證,這里已經可以實現A到B的免秘鑰上傳下載了.
4.B對A建立信任關系
在B機上執行同樣的操作,建立B對A的信任關系。
[root@localhost ~]#ssh-keygen -t rsa root@localhost ~]# ll /root/.ssh/ total 8 -rw-r--r-- 1 root root 1678 Apr 27 15:59 authorized_keys -rw------- 1 root root 1675 Apr 27 15:55 id_rsa -rw-r--r-- 1 root root 400 Apr 27 15:55 id_rsa.pub
將B主機的公鑰證書id_rsa.pub復制到機器A主機的root家目錄的.ssh子目錄中,同時將文件名更換為authorized_keys
scp -r -P 22 /root/.ssh/id_rsa.pub root@192.168.100.82:/root/.ssh/authorized_keys
這樣A和B主機就可以互相傳文件而不需要密碼了.
如果連接反應慢,請修改以下兩參數
/etc/ssh/sshd_config GSSAPIAuthentication no UseDNS no
重啟sshd
service sshd restart
################################################################################
二.使用ssh-keygen和ssh-copy-id三步實現SSH無密碼登錄
由於上面這樣復制文件很麻煩,以下給出更為方便的方法,在做單向ssh認證時都在本端計算機進行, 即使用ssh-copy-id進行操作,它可以直接在對端生成authorized_keys文件.
[user1@localhost ~]$ ssh-keygen -t rsa Generating public/private rsa key pair. Enter file in which to save the key (/home/user1/.ssh/id_rsa): Created directory '/home/user1/.ssh'. Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /home/user1/.ssh/id_rsa. Your public key has been saved in /home/user1/.ssh/id_rsa.pub. The key fingerprint is: da:e3:f0:2b:93:47:15:4d:a1:dc:68:00:07:ec:41:87 user1@localhost The key's randomart image is: +--[ RSA 2048]----+ | o+++ oo. | | Eo o.+. | | . . =.. | | . .. | | S. | | o. | | ooo | | ++.. | | ++. | +-----------------+ [user1@localhost ~]$ ssh-copy-id -i .ssh/id_rsa.pub "-p 6168 user1@192.168.3.192" The authenticity of host '[192.168.3.192]:6168 ([192.168.3.192]:6168)' can't be established. RSA key fingerprint is 8d:8c:22:67:68:f7:ad:1e:83:f3:4c:d4:32:d8:53:d6. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added '[192.168.3.192]:6168' (RSA) to the list of known hosts. user1@192.168.3.192's password: Now try logging into the machine, with "ssh '-p 6168 user1@192.168.3.192'", and check in: .ssh/authorized_keys to make sure we haven't added extra keys that you weren't expecting. [user1@localhost ~]$ #這樣就會自動在192.168.3.192遠端機器的.ssh目錄下創建authorized_keys文件.
#!/bin/bash if [ ! -f ~/.ssh/id_rsa ];then ssh-keygen -t rsa -P "" -f ~/.ssh/id_rsa else echo "id_rsa has created ..." fi
其中: