SSHPASS实用手册

柳三千

在使用sshpass登录远程服务器后,你可以通过两种方式执行命令:直接在命令行中指定远程命令通过管道传递命令。以下是详细用法和示例:

一、基本语法:直接执行远程命令

将需要执行的命令放在ssh之后,用引号包裹:

sshpass -p "密码" ssh user@host "远程命令1; 远程命令2; ..."

示例1:查看远程服务器磁盘空间

sshpass -p "123456" ssh root@192.168.139.150 "df -h; free -m"

示例2:创建目录并复制文件

sshpass -p "123456" ssh root@192.168.139.150 "mkdir -p /data; cp /etc/hosts /data/"

二、通过管道执行多条命令

使用<< EOF创建 heredoc,将多行命令传递给远程服务器:

sshpass -p "密码" ssh user@host << EOF
远程命令1
远程命令2
...
EOF

示例:批量配置远程服务器

StrictHostKeyChecking=no 用于控制 SSH 客户端如何验证远程服务器的主机密钥(第一次SSH登录需要用到)

sshpass -p "123456" ssh -o StrictHostKeyChecking=no root@192.168.139.150 << EOF
# 更新系统
yum update -y

# 安装nginx
yum install -y nginx

# 启动服务
systemctl start nginx
systemctl enable nginx
EOF

三、在脚本中组合使用

如果你需要在脚本中循环执行多个命令,可以这样写:

#!/bin/bash

# 定义服务器列表和密码
HOSTS=("192.168.139.150" "192.168.139.151")
USER="root"
PASSWD="123456"

# 遍历服务器执行命令
for host in "${HOSTS[@]}"; do
    echo "正在服务器 $host 上执行命令..."
    
    # 方法1:直接执行单个命令
    sshpass -p "$PASSWD" ssh "$USER@$host" "mkdir -p /data/backup"
    
    # 方法2:通过管道执行多条命令
    sshpass -p "$PASSWD" ssh "$USER@$host" << EOF
cd /data
touch test.txt
echo "Hello from $(hostname)" > test.txt
ls -l
EOF
done

四、注意事项

  1. 引号与变量扩展

    • 双引号"会解析本地变量,单引号'会保留命令原貌。
    # 错误示例:本地变量不会在远程执行
    LOCAL_VAR="test"
    sshpass -p "123456" ssh root@host "echo $LOCAL_VAR"  # 输出本地变量值
    
    # 正确示例:使用单引号或转义$符号
    sshpass -p "123456" ssh root@host 'echo $LOCAL_VAR'  # 输出远程变量值
    
  2. 复杂命令需要转义

    # 错误示例:括号会被本地Shell解析
    sshpass -p "123456" ssh root@host "if [ -f /etc/hosts ]; then echo '文件存在'; fi"
    
    # 正确示例:使用转义或单引号
    sshpass -p "123456" ssh root@host 'if [ -f /etc/hosts ]; then echo "文件存在"; fi'
    
  3. 安全建议

    • 避免在脚本中明文存储密码,改用环境变量或密钥认证。
    • 生产环境推荐使用ssh-keygenssh-copy-id配置无密码登录。

五、扩展用法

  1. 上传文件到远程服务器

    sshpass -p "123456" scp local_file.txt root@192.168.139.150:/remote/path/
    
  2. 从远程服务器下载文件

    sshpass -p "123456" scp root@192.168.139.150:/remote/file.txt /local/path/
    
  3. 执行带sudo权限的命令

    sshpass -p "123456" ssh root@host "sudo yum install -y nginx"
    

通过上述方法,你可以灵活地使用sshpass登录远程服务器并执行各种命令,适用于自动化部署、批量管理等场景。

文章版权声明:除非注明,否则均为柳三千运维录原创文章,转载或复制请以超链接形式并注明出处。

取消
微信二维码
微信二维码
支付宝二维码