找回密码
立即注册
搜索
热搜: Java Python Linux Go
发回帖 发新帖

4955

积分

0

好友

656

主题
发表于 11 小时前 | 查看: 11| 回复: 0

在日常的运维工作中,频繁登录 Linux 服务器是常态。当环境特殊或需要跳转多台同网段服务器时,反复输入密码不仅繁琐,还影响效率。通常,我们会采用配置 SSH 密钥对的方式实现免密登录:

ssh-keygen
cd ~/.ssh/
scp id_rsa.pub 目标主机IP:~/.ssh/authorized_keys

那么,除了配置密钥,有没有一种方法可以在单次 SSH 登录时,直接在命令参数里提供密码,实现一步到位的连接呢?答案是肯定的,这个工具就是 sshpass

sshpass 是一个轻量级的命令行工具,它的核心作用是以非交互式的方式,自动为 SSH(或 scp、rsync 等)连接提供登录密码,从而实现脚本自动化或简化手动操作。

sshpass 安装

在不同的 Linux 发行版上,安装命令略有不同:

# RedHat/CentOS 系列
yum -y install sshpass

# Debian/Ubuntu 系列
apt-get install sshpass

sshpass 语法与参数

基本语法非常简单:

sshpass (选项)

具体参数如下:
用法:sshpass [-f|-d|-p|-e] [-hV] 命令参数

  • -f filename:从文件中读取密码
  • -d number:使用指定的文件描述符获取密码
  • -p password:直接在命令行中提供密码(安全性低
  • -e:从名为 SSHPASS 的环境变量中获取密码
  • -P prompt:设置 sshpass 用于检测密码提示的字符串
  • -v:显示详细执行过程
  • -h:显示帮助信息
  • -V:打印版本信息

注意-f-d-p-e 这四个密码提供选项只能同时使用一个。

sshpass 使用实例

1. 基础连接
使用 -p 参数直接在命令中指定密码进行远程连接:

sshpass -p your_password ssh -p 22 root@目标IP

2. 执行远程命令
连接后执行特定命令并返回结果,而无需建立完整的交互式会话。例如,检查远程服务器的磁盘使用情况:

sshpass -p your_password ssh -p 22 root@目标IP ‘df -h’

或者,通过远程服务器 Telnet 到另一台机器的端口,验证其是否开放:

sshpass -p your_password ssh -p 22 root@跳板机IP ‘telnet 目标IP 目标端口’

以上方式只是将命令的执行结果打印到本地终端,并不会让你真正登录到那台远程服务器上。

3. 从文件读取密码
将密码写入一个文件,然后通过 -f 参数指定该文件:

sshpass -f /path/to/your_password_file ssh -p 22 root@目标IP

安全警告:上述在命令行或文件中明文存储密码的方式极不安全,密码可能出现在历史记录或系统日志中。不推荐在生产环境中使用。

推荐的安全使用方式:环境变量法

为了兼顾自动化与安全性,建议使用 -e 选项,通过环境变量传递密码。

临时使用:密码仅在当前 Shell 会话中有效。

export SSHPASS='your_password'
echo $SSHPASS
sshpass -e ssh -p 22 root@目标IP

永久设置(谨慎操作):如需永久设置,可在 /etc/profile 文件开头添加:

export SSHPASS='your_password'

保存后,执行 source /etc/profile 使配置立即生效。但请注意,将密码明文写入全局配置文件同样存在安全风险,需结合严格的系统文件权限控制。

扩展应用:与 scp 和 rsync 结合

sshpass 同样可以用于需要密码验证的文件传输场景。

1. 使用 scp 传输文件
下面的命令演示了如何递归拷贝本地 Nginx 配置目录到远程服务器:

scp -r /etc/nginx/nginx.conf --rsh="sshpass -p ‘your_password’ ssh -l jacktian" 目标IP:/home/jacktian
  • -r:递归拷贝整个目录。
  • --rsh:指定远程 shell 程序,这里我们用它来嵌入带有密码的 ssh 命令。

2. 使用 rsync 同步备份
通过 rsync 将远程服务器的备份目录同步到本地:

rsync --rsh="sshpass -p ‘your_password’ ssh -l jacktian" 目标IP:/data/backup/ /backup/

再次强调:在命令行或脚本中硬编码密码是危险的做法,尤其是在执行自动化文件备份与同步任务时。务必评估安全风险,在可控的测试环境或内部网络中谨慎使用。对于生产环境,强烈建议优先采用更安全的 SSH密钥认证 方式。

安全无小事,工具虽便捷,但如何合规、安全地使用它们,才是每一位运维工程师需要持续思考和实践的课题。如果你想深入探讨更多自动化运维与安全实践,欢迎来云栈社区交流分享。




上一篇:Linux修改密码的3种命令行方法与安全实践指南
下一篇:手把手组装双路X99黑苹果主机:E5-2680V3打造平替Mac Pro避坑指南
您需要登录后才可以回帖 登录 | 立即注册

手机版|小黑屋|网站地图|云栈社区 ( 苏ICP备2022046150号-2 )

GMT+8, 2026-4-7 18:12 , Processed in 0.806738 second(s), 39 queries , Gzip On.

Powered by Discuz! X3.5

© 2025-2026 云栈社区.

快速回复 返回顶部 返回列表