在每次使用ssh登入的時候要輸入密碼是件很麻煩的事情,那麼今天我們就來解決一下這個問題。
解決這個問題的原理就是使用者將自己的公鑰儲存在遠端主機上。登入的時候,遠端主機會向使用者傳送一段隨機字串,使用者用自己的私鑰加密後,再發回來。遠端主機用事先儲存的公鑰進行解密,如果成功,就證明使用者是可信的,直接允許登入shell,不再要求密碼。
這種方法要求使用者必須提供自己的公鑰。如果沒有現成的,可以直接用ssh-keygen生成乙個:
$ ssh-keygen
生成之後就要將本機的公鑰新增到目標機的~/.ssh/authorized_keys檔案中,這時候有兩個方法,一種是用過scp,此檔案傳輸到目標機,然後在目標機將檔案內容重定向到上述檔案中
cat id_rsa.pub >> ~/.ssh/authorized_keys
但是此種方式比較麻煩,簡單一點的這時再輸入下面的命令,將公鑰傳送到遠端主機host上面:
$ ssh-copy-id user@host
如果有問題可以從以下幾個方面著手解決
1、linux防火牆是否關閉2、編輯目標機的/etc/ssh/sshd_config這個檔案,去掉下面幾行前面」#」注釋,然後重啟ssh
rsaauthentication yes
pubkeyauthentication yes
authorizedkeysfile .ssh/authorized_keys
service sshd restart
然後應該就沒有什麼問題了。
還有實際過程中可能會遇到需要多台機器都要不輸入密碼來登入目標伺服器,這時候可以自己寫個指令碼來解決
#/bin/bash
ssh-keygen -t rsa #生成rsa金鑰
ssh-copy-id username@ip #將金鑰新增到目標主機
然後可能還需要通過scp傳輸多個檔案或者資料夾到目標機,然後還有一段shell**,
<#/bin/bash
cmd="scp"
option="-r"
file=0
dir=0
host="username@ip:path"
path=$1;
if [ -z $path ]
then
echo "the path cannot be empty!"
exit
fi
if [ -f "$path" ]
then
option=""
file=1;
fiif [ -d "$path" ]
then
dir=1
fiif [ $dir == 0 -a $file == 0 ]
then
echo "the dir or file does not exist!"
exit
ficmd $option $path $host>
ssh原理與應用
ssh自動登入的幾種方法
ssh 免密碼登入
ssh 無密碼登入要使用公鑰與私鑰。linux下可以用用ssh keygen生成公鑰 私鑰對,下面我以centos為例。有機器a 192.168.1.155 b 192.168.1.181 現想a通過ssh免密碼登入到b。1.在a機下生成公鑰 私鑰對。chenlb a ssh keygen t rs...
ssh 免密碼登入
ssh 免密碼登入 ssh 無密碼登入要使用公鑰與私鑰。linux下可以用用ssh keygen生成公鑰 私鑰對,下面我以centos為例。有機器a 192.168.1.155 b 192.168.1.181 現想a通過ssh免密碼登入到b。1.在a機下生成公鑰 私鑰對。chenlb a ssh k...
ssh免密碼登入
實現原理 主機a 產生公鑰和金鑰,將主機a的公鑰傳送到主機b 主機b 接收主機a傳送的公鑰 主機a ssh請求登入到主機b 主機b 傳送給主機a一串字元 主機a 收到主機b傳送的字元,使用金鑰進行加密,並傳送回到主機b 主機b 接收到主機a使用金鑰加密後的字元,使用主機a的公鑰執行一定演算法進行對比...