最直接的方式(不推荐,仅作了解)
这是最直观的方法,你只需要在命令行中输入 ssh user@hostname,然后系统会提示你输入密码。

ssh myuser@192.168.1.100
执行后,终端会显示:
myuser@192.168.1.100's password:
你直接输入密码并按回车即可。
为什么不推荐?
- 密码明文显示:在某些旧的终端或配置下,你输入的密码字符会直接显示在屏幕上,非常不安全。
- 脚本化困难:你无法在 Shell 脚本中自动使用这种方式,因为脚本无法“交互式”地输入密码。
- 无历史记录:按上下箭头无法找到你之前输入过的密码。
更安全的方式(推荐)
现代的 OpenSSH 客户端默认会隐藏你输入的密码,当你输入时,终端不会有任何字符显示(光标也不会移动),这和输入银行卡密码的体验类似。

ssh myuser@192.168.1.100
执行后,终端会显示:
myuser@192.168.1.100's password:
请直接输入你的密码,然后按回车,即使你看不到任何输入,只要输入正确并回车,连接就会成功。
优点:
- 密码隐藏:防止旁窥者看到你的密码长度。
- 简单直接:对于一次性的手动连接,这是最方便且安全的方式。
自动化和脚本化的方式(强烈推荐)
如果你需要在脚本或自动化流程中使用 SSH,前两种方式都不适用,这时,你有两个绝佳的选择:

选项 A:使用 SSH 密钥对(最佳实践)
这是最安全、最推荐的长期解决方案,它通过加密的密钥对进行认证,完全不需要输入密码。
工作原理: 你生成一对密钥:一个私钥(存放在你的本地机器,必须保密)和一个公钥(需要上传到远程服务器)。
步骤:
-
在本地机器生成密钥对(如果还没有的话):
# 一路按回车使用默认设置即可 ssh-keygen -t rsa -b 4096
这会在你的
~/.ssh/目录下创建id_rsa(私钥) 和id_rsa.pub(公钥)。 -
将公钥上传到远程服务器:
# 将本地的公钥追加到远程服务器的 authorized_keys 文件中 ssh-copy-id myuser@192.168.1.100
执行此命令时,系统会最后一次要求你输入
myuser的密码,验证成功后,你的公钥就会被安全地添加到远程服务器~/.ssh/authorized_keys文件中。 -
免密登录: 完成上一步后,你再登录时就再也不需要密码了!
ssh myuser@192.168.1.100
你会直接登录成功,没有任何密码提示。
优点:
- 极高的安全性:私钥比密码复杂得多,且可以设置密码短语进一步保护。
- 完全自动化:非常适合脚本、CI/CD、自动化部署等场景。
- 无密码管理烦恼:无需在脚本中硬编码密码。
选项 B:使用 sshpass 工具(不推荐,仅适用于无法使用密钥的环境)
sshpass 是一个专门用于在命令行中非交互式提供密码的工具。它有安全风险,请谨慎使用。
安装 sshpass:
- macOS (使用 Homebrew):
brew install sshpass - Debian/Ubuntu:
sudo apt-get install sshpass
使用方法:
# -p 后面直接跟你的密码 sshpass -p 'your_password' ssh myuser@192.168.1.100
安全警告:
- 密码明文暴露:你的密码会通过
ps命令等系统工具被其他用户看到,也会被保存在 Shell 历史记录中,非常危险。 - 仅限不安全网络:绝对不要在生产环境或有安全审计要求的服务器上使用。
相对安全的用法(仍然不完美): 你可以从文件中读取密码,而不是直接写在命令行里。
# 创建一个包含密码的文件(注意文件权限) echo "your_password" > password.txt chmod 600 password.txt # 只有当前用户可以读写 # 使用 -f 选项从文件读取密码 sshpass -f password.txt ssh myuser@192.168.1.100
这比 -p 稍好,但密码仍然以明文形式存在于磁盘上。
总结与建议
| 场景 | 推荐方法 | 优点 | 缺点 |
|---|---|---|---|
| 手动、一次性连接 | 直接输入(密码隐藏) | 简单、直接、密码不显示在终端 | 无法自动化 |
| 自动化、脚本、日常使用 | 方式三 A:SSH 密钥对 | 最安全、最稳定、完全自动化 | 需要初始配置 |
| 无法使用密钥的旧环境 | 方式三 B:sshpass |
能实现脚本化 | 不安全,密码易泄露 |
最终建议:
- 对于个人或开发环境:请务必花几分钟时间配置好 SSH 密钥对,这是现代服务器管理的标准做法,一劳永逸。
- 对于临时性的手动操作:直接使用
ssh user@host,然后输入密码即可,系统会自动为你隐藏输入。 - 尽量避免使用
sshpass,除非你非常清楚其风险,并且没有其他选择。
