每次 ssh user@host 登錄目標機器都要輸密碼是件很煩的事,特別是經(jīng)常訪問多臺主機的情況。 最近寫自動化腳本時碰到要自動做機器間 ssh 驗證,碰到一些問題記錄下來備忘。
分析
- 通過
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"命令生成本地機器的私鑰和公鑰:~/.ssh/id_rsaand~/.ssh/id_rsa.pub - 授權(quán)就是將將本地機器的公鑰加入到目標機器的
~/.ssh/authorized_keys中供驗證用 - 本地
~/.ssh/known_hosts中信任目標機器的公鑰指紋
自動做 ssh-key 授權(quán)
# copy local ssh-key to remote 對應(yīng)分析中的第二步
cat ~/.ssh/id_rsa.pub | ssh root@192.168.37.110 "cat >> ~/.ssh/authorized_keys"
# add host to known_hosts 對應(yīng)分析中的第三步
ssh-keyscan -t rsa "192.168.37.110" >> ~/.ssh/known_hosts
或者這兩條命令可以精簡為如下一條
brew install ssh-copy-id # just for mac
ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.37.110
還有剩下的一個難題是還需要手動輸入密碼,這個怎么自動化呢?
# just for mac
brew install https://raw.githubusercontent.com/kadwanev/bigboybrew/master/Library/Formula/sshpass.rb
sshpass -p "PASSWORD" ssh-copy-id -i ~/.ssh/id_rsa.pub -o StrictHostKeyChecking=no root@192.168.37.110
或者使用 Fabric 等遠程執(zhí)行 run("cmd")
# tips 執(zhí)行 sudo 不需要手動輸入密碼
echo "PASSWORD" | sudo -S CMD
用 iterm2 做 terminal 管理
略