自动化 ssh 授权笔记

每次 ssh user@host 登录目标机器都要输密码是件很烦的事,特别是经常访问多台主机的情况。 最近写自动化脚本时碰到要自动做机器间 ssh 验证,碰到一些问题记录下来备忘。

分析

  1. 通过 ssh-keygen -t rsa -b 4096 -C "your_email@example.com" 命令生成本地机器的私钥和公钥: ~/.ssh/id_rsa and ~/.ssh/id_rsa.pub
  2. 授权就是将将本地机器的公钥加入到目标机器的 ~/.ssh/authorized_keys 中供验证用
  3. 本地 ~/.ssh/known_hosts 中信任目标机器的公钥指纹

自动做 ssh-key 授权


# copy local ssh-key to remote 对应分析中的第二步
cat ~/.ssh/id_rsa.pub | ssh root@192.168.37.110 "cat >> ~/.ssh/authorized_keys"

# add host to known_hosts 对应分析中的第三步
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 等远程执行 run("cmd")

# tips 执行 sudo 不需要手动输入密码
echo "PASSWORD" | sudo -S CMD

用 iterm2 做 terminal 管理

参考

    原文作者:zvving
    原文地址: https://www.jianshu.com/p/6ca1eacc42fd
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞