菜鸟科技网

linux ssh命令 密码

在 SSH 命令中直接使用密码登录不推荐,因为它存在安全风险(如密码被嗅探、暴力破解),最佳实践是使用SSH 密钥对进行无密码登录。

linux ssh命令 密码-图1
(图片来源网络,侵删)

最直接但危险的方式:sshpass

这是最直接在命令行中指定密码的方法,但它极度不安全,因为你的密码会以明文形式出现在命令历史、进程列表(ps)和日志中,几乎等于公开。

警告:仅用于测试或完全可控的自动化脚本,切勿在生产环境或公共网络上使用。

安装 sshpass

sshpass 通常不是系统默认安装的,你需要先安装它。

  • 在 Debian/Ubuntu 上:

    linux ssh命令 密码-图2
    (图片来源网络,侵删)
    sudo apt-get update
    sudo apt-get install sshpass
  • 在 CentOS/RHEL/Fedora 上:

    sudo yum install sshpass

使用方法

sshpass 的基本语法是:sshpass -p '你的密码' ssh user@hostname

示例:

# 使用密码 'mysecretpassword' 登录到 '192.168.1.100' 上的 'root' 用户
sshpass -p 'mysecretpassword' ssh root@192.168.1.100

其他常用选项:

linux ssh命令 密码-图3
(图片来源网络,侵删)
  • -P:允许交互式密码提示(与 -p 相对,通常不常用)。

  • -f filename:从文件中读取密码,这比 -p 稍好一点,因为密码不会出现在命令行中,但文件本身需要妥善保管。

    # 创建一个包含密码的文件
    echo "mysecretpassword" > /path/to/passfile.txt
    chmod 600 /path/to/passfile.txt # 设置文件权限,只有所有者可读写
    # 使用文件中的密码
    sshpass -f /path/to/passfile.txt ssh root@192.168.1.100

标准但交互式的方式:手动输入密码

这是最标准、最常见的方式,当你执行 ssh 命令后,系统会提示你输入密码,然后你手动输入并回车。

优点:

  • 安全性高,密码不会出现在命令行或历史记录中。
  • 所有 SSH 客户端都支持。

缺点:

  • 无法用于自动化脚本,因为需要人工干预。

示例:

# 登录到远程服务器
ssh user@remote_server_ip
# 系统会提示你输入密码
user@remote_server_ip's password: 
# 输入密码,输入时不会显示任何字符(光标不动),输入完成后按回车

最佳实践:使用 SSH 密钥对(无密码登录)

这是业界公认最安全、最方便的 SSH 登录方式,它基于非对称加密,你拥有一对密钥:私钥(留在你的本地机器上,绝不外传)和公钥(可以安全地分发到远程服务器)。

工作流程

  1. 在本地机器生成密钥对(如果还没有的话)。
  2. 将公钥复制到远程服务器~/.ssh/authorized_keys 文件中。
  3. 登录时,SSH 客户端会用你的私钥去“证明”你的身份,整个过程无需输入密码。

详细步骤

步骤 1:在本地机器生成 SSH 密钥对 如果你的 ~/.ssh 目录下没有 id_rsa(或 id_ed25519)和 id_rsa.pub(或 id_ed25519.pub)文件,就运行以下命令生成,推荐使用更安全的 ed25519 算法。

# -t 指定密钥类型,-C 添加一个注释(通常是你的邮箱)
ssh-keygen -t ed25519 -C "your_email@example.com"
# 系统会提示你:
# 1. 保存密钥的位置(直接回车使用默认的 ~/.ssh/id_ed25519)
# 2. 输入一个密码(可选,但强烈建议!这会给私钥再加一层保护)
#    如果设置了密码,每次使用私钥时都需要输入这个密码。
# 3. 确认密码

步骤 2:将公钥复制到远程服务器 有多种方法可以实现这一步。

方法 A:使用 ssh-copy-id 命令(最简单推荐) 这个命令会自动将你的公钥追加到远程服务器的 authorized_keys 文件中。

# 将公钥复制到 user@hostname
# 第一次连接时,它仍然会提示你输入一次密码
ssh-copy-id user@remote_server_ip
# 系统会提示你输入 user@remote_server_ip 的密码
# 输入正确后,你的公钥就会被安全地复制过去

方法 B:手动复制(ssh-copy-id 不可用时)

  1. 查看你的公钥内容:

    cat ~/.ssh/id_ed25519.pub
  2. 登录到远程服务器(使用密码),然后将公钥内容追加到 authorized_keys 文件中:

    # 1. 登录
    ssh user@remote_server_ip
    # 2. 在远程服务器上执行
    mkdir -p ~/.ssh
    chmod 700 ~/.ssh
    echo "粘贴你的公钥内容到这里" >> ~/.ssh/authorized_keys
    chmod 600 ~/.ssh/authorized_keys

步骤 3:无密码登录 你可以直接尝试登录,应该不会再提示你输入密码了。

ssh user@remote_server_ip
# 如果你给私钥设置了密码,这里会提示你输入那个私钥的密码
# 否则,将直接登录成功

高级技巧:使用 SSH 代理转发

如果你需要通过一台“跳板机”(Bastion Host/Jump Server)访问另一台服务器,并且这两台服务器都配置了密钥登录,你可以使用 SSH 代理转发来避免在中间环节重复输入密码。

场景:

  • 你(本地) -> 跳板机 (bastion) -> 目标服务器 (target)

操作步骤:

  1. 启动 SSH 代理(如果还没启动):
    eval "$(ssh-agent -s)"
  2. 将你的私钥添加到代理(如果还没添加):
    ssh-add ~/.ssh/id_ed25519
    # 如果你的私钥有密码,这里会提示你输入
  3. 通过 -A 选项登录到跳板机:
    ssh -A user@bastion_server_ip

    -A 选项会把你本地 SSH 代理中的身份转发到跳板机上。

  4. 从跳板机登录到目标服务器时,SSH 会自动使用你转发过来的身份,无需再次输入密码:
    ssh user@target_server_ip

总结与建议

方法 优点 缺点 适用场景
sshpass 命令行直接指定,适合脚本 极不安全,密码明文暴露 仅限本地测试、完全可信的内网自动化脚本
手动输入 安全,标准 无法自动化,效率低 日常手动管理服务器,偶尔登录
SSH 密钥对 非常安全,方便,可自动化 初始配置稍复杂 强烈推荐,所有生产环境和个人日常使用
SSH 代理转发 方便多跳登录,保持会话 配置稍复杂 需要通过跳板机访问内网服务器的场景

最终建议:

  1. 永远不要在命令行中直接使用明文密码
  2. 为你的所有服务器配置 SSH 密钥登录,这是现代系统管理的基石。
  3. 为你的私钥设置一个强密码,以防止私钥文件被盗用。
  4. 在自动化脚本中,使用 ssh-agentssh-add 来管理私钥,而不是硬编码密码。
分享:
扫描分享到社交APP
上一篇
下一篇