Mac Zsh环境下使用环境变量作为SSH密码连接远程Ubuntu服务器是否可行?
需求实现说明
你描述的写法无法直接实现,原因如下:
- SSH 命令的
-p参数作用是指定连接端口,和传递密码完全无关 - 原生SSH没有设计命令行明文传密码的参数,就是为了避免密码被命令行历史、系统进程列表等途径泄露。
可落地的替代方案
方案1:sshpass配合环境变量(最贴近你的预期用法)
如果你确实需要用环境变量存密码实现免输密码登录,可以借助sshpass工具实现:
- 先在本地Mac安装sshpass:
brew install hudochenkov/sshpass/sshpass - 打开zsh配置文件
~/.zshrc,添加环境变量:export userpwd="你的远程服务器密码" - 执行
source ~/.zshrc让配置生效 - 后续登录命令写法如下:
sshpass -p $userpwd ssh user@sometesystem.com
注意:该方案密码会明文存在本地环境变量中,存在泄露风险,仅允许在个人测试环境使用,生产环境、公用设备禁止使用。
方案2:SSH密钥登录(官方推荐的安全方案)
如果没有必须用环境变量存密码的要求,更推荐用SSH密钥对实现免密登录,安全性更高,也更便捷:
- 本地生成密钥对,执行命令后全程回车即可(不需要设置密码的话):
ssh-keygen -t ed25519 - 将公钥上传到远程Ubuntu服务器,这一步只需要输入一次远程密码:
ssh-copy-id user@sometesystem.com - 之后登录直接执行
ssh user@sometesystem.com就会自动登录,不需要再输入密码。
内容的提问来源于stack exchange,提问作者EastsideDev
相关产品推荐
相关产品推荐

