如何实现SSH自动输入密码,保障/etc/rc.local中SSH隧道脚本正常运行
SSH自动认证实现方案
方案1:SSH密钥认证(优先推荐,无明文密码风险)
这是SSH官方推荐的免密登录方案,安全性和稳定性远高于明文传密码的实现,操作步骤如下:
- 切换到rc.local执行对应的用户(默认是root),执行密钥生成命令,全程按回车不要设置密钥密码:
# 新系统推荐用ed25519算法 ssh-keygen -t ed25519 # 老系统不支持ed25519则用RSA算法 # ssh-keygen -t rsa -b 4096 - 把生成的公钥上传到远程服务器的授权列表,执行后输入一次远程SSH密码即可:
ssh-copy-id ubuntu@20.115.5.61 - 手动执行一次隧道命令验证免密是否生效:
无需输入密码且隧道正常运行的话,你原有写在/etc/rc.local里的脚本不需要做任何修改,开机即可自动执行。ssh -fN -R 3049:localhost:2049 ubuntu@20.115.5.61
注意:如果rc.local以root身份运行,所有上述操作都需要在root用户下执行,确保密钥存储在/root/.ssh目录下,避免脚本读取不到密钥的问题
方案2:sshpass明文传密码(仅应急使用,安全性极低)
如果受环境限制无法使用密钥认证,可以用sshpass工具传递明文密码,操作步骤如下:
- 先安装sshpass工具:
# Debian/Ubuntu系 apt update && apt install -y sshpass # CentOS/RHEL系 yum install -y sshpass - 修改/etc/rc.local里的脚本,将
cmd变量替换为如下内容,将你的远程SSH密码替换为实际密码:
新增的cmd="sshpass -p '你的远程SSH密码' ssh -o StrictHostKeyChecking=no -fN -R ${remote_port}:localhost:${local_port} ${remote_host}"-o StrictHostKeyChecking=no参数用于跳过首次连接的主机指纹确认提示,避免脚本卡住。
注意:该方案会将SSH密码明文存储在脚本中,任何有权限读取rc.local文件的用户都可以获取到服务器密码,仅建议在内网完全可信的环境下临时使用
内容的提问来源于stack exchange,提问作者James Van Halen
相关产品推荐
相关产品推荐

