sshpass -o
时间: 2024-07-09 12:01:16 浏览: 125
`sshpass`是一个Linux和macOS命令行工具,用于自动化SSH密码输入,避免在终端中明文显示密码或频繁交互。`-o`选项是`sshpass`中的一个参数,用来设置其他配置选项。
当你看到`sshpass -o`后通常会接一个选项,比如:
```bash
sshpass -o StrictHostKeyChecking=no ssh user@example.com
```
在这个例子中,`-o StrictHostKeyChecking=no`表示禁用严格的主机密钥检查,这样即使第一次连接的是新的服务器,`sshpass`也会自动输入密码并继续执行。你可以查阅`sshpass --help`获取完整的可用选项列表,了解如何根据你的需求调整这些设置。
相关问题
sshpass -e
sshpass -e是一个命令行工具,用于在非交互式的登录过程中免输密码执行命令。它支持从文件中导入密码或者从环境变量中获取密码。使用sshpass -e命令时,可以通过-o StrictHostKeyChecking=no选项来忽略RSA key检查的提示。这个工具可以用于自动化脚本中,以便无需手动输入密码进行登录。
for a in ${MASTER_IP_LIST[@]} do echo "==="$a echo -e "${BL}#=====远程连接其他主节点$a" sshpass -p root ssh -Tq -o StrictHostKeyChecking=no root@$a << remotessh for b in ${MASTER_IP_LIST[@]} do echo "+++"$b done done 打印不出来变量b
您的代码中,for 循环语句的语法是正确的,但是在远程登录的 shell 中,shell 脚本和命令的执行环境和当前登录用户的环境是不同的。因此,需要将 $b 作为环境变量传递给远程登录的 shell,才能在远程登录的 shell 中使用。
可以通过在 for 循环外定义一个变量,将 $b 的值存储到这个变量中,然后在远程登录的 shell 中将这个变量作为环境变量进行传递,再在远程登录的 shell 中使用这个环境变量。
例如,修改您的代码如下:
```
#!/bin/bash
MASTER_IP_LIST=("192.168.1.100" "192.168.1.101" "192.168.1.102")
for a in ${MASTER_IP_LIST[@]}
do
echo "==="$a
echo -e "${BL}#=====远程连接其他主节点$a"
sshpass -p root ssh -Tq -o StrictHostKeyChecking=no root@$a << remotessh
for b in ${MASTER_IP_LIST[@]}
do
echo "+++"$b
export REMOTE_B=$b
# 在远程登录的 shell 中使用 REMOTE_B 环境变量
sshpass -p root ssh -Tq -o StrictHostKeyChecking=no root@$b "echo \${REMOTE_B}"
done
remotessh
done
```
在这个修改后的代码中,我们将远程登录的 shell 中需要使用的 $b 的值存储到 REMOTE_B 环境变量中,并在远程登录的 shell 中使用这个环境变量。
阅读全文