在编写脚本的时候,希望自动登录服务器,不必人为输入密码。
无论哪种方法,前提先使用 ssh 手动登录一次服务器,以使得客户端记录到你的服务器连接信息:
ssh admin@192.168.12.1 -p 2345
可以通过 cat .ssh/known_hosts
查看到 known_hosts 中的登录信息:
使用 sshpass
在脚本中添加自动登录脚本即可:
export SSHPASS='password' # 服务器的 SSH 登录密码
ROUTER_IP="192.168.12.1" # 服务器地址
ROUTER_PORT="2345" # 服务器 SSH 端口
echo `sshpass -e ssh admin@${ROUTER_IP} -p ${ROUTER_PORT} ifconfig` # ifconfig 为你要执行的命令,执行多个命令请复制多行
sshpass
可能需要额外安装!使用密钥登录
首先在客户端使用 ssh-keygen 生成密钥对:
ssh-keygen
可能需要额外安装!(openwrt 中的软件包名为 openssh-keygen
)在 /root/.ssh/ 下就可以找到 2 个文件:
id_ed25519(私钥)、id_ed25519.pub(公钥)
把公钥拷贝到服务器上(这里我需要访问的是路由器,梅林固件 web 界面上就有了,直接复制过去就行)!
回到客户端,输入命令尝试连接:
ssh -i '/root/.ssh/id_ed255191' admin@192.168.12.1 -p 2345
正常情况下,应该是登录成功了,但是我这里报错了!
因为 openwrt 使用的 SSH 是 dropbear SSH,跟 openssh 还有区别!
ssh: Exited: String too long 的解决办法
openwrt 中,安装 dropbearconvert
软件包,然后使用该工具转换私钥:
dropbearconvert openssh dropbear /root/.ssh/id_ed25519 /root/id_ed25519
或者直接使用 dropbearkey 生成密钥文件,一步到位:
dropbearkey -f /root/id_ed25519 -t ed25519
注意,使用如上
dropbearkey
生成时,公钥会直接打印在屏幕上,程序只会生成私钥文件!注意保存!然后再尝试登录:
ssh -i '/root/id_ed255191' admin@192.168.12.1 -p 2345 # 注意,-i 后面的私钥路径换成转换后的了
此时,登录成功!
感谢
原本以为很简单的一件事,折腾了半个多小时,计划赶不上变化啊!特别感谢如下几位大佬的文章,终于解决了这个问题~
Comments NOTHING