bash - 在多个主机上使用 Bash Shell 脚本进行 SSH 身份验证验证
问题描述
我知道还有其他解决方案,例如expect
, 或Python paramiko
,但这bash shell
是目前唯一可用的选项。
在这 3 个 IP 中,仅172.16.1.2
安装了 SSH 服务器并且它们具有相似的密码。
wolf@linux:~$ cat ip.txt
172.16.1.1
172.16.1.2
172.16.1.3
wolf@linux:~$
这是 Bash 脚本
wolf@linux:~$ cat sshSession.sh
while read host
do
export SSH_ASKPASS='~/ePass'
setsid ssh -T user@$host
if [ $? = 0 ]; then
exit
echo "$host | SSH Authentication OK"
else
echo "$host | SSH Authentication PROBLEM"
fi
done < ip.txt
wolf@linux:~$
输出
wolf@linux:~$ ./sshSession.sh
ssh: connect to host 172.16.1.1 port 22: No route to host
172.16.1.1 | SSH Authentication PROBLEM
Welcome to Ubuntu Server
* Documentation: https://help.ubuntu.com
* Management: https://landscape.canonical.com
* Support: https://ubuntu.com/advantage
-bash: line 1: 172.16.1.3: command not found
172.16.1.2 | SSH Authentication PROBLEM
wolf@linux:~$
这里有几个问题。
我只想获取身份验证状态,而不是登录服务器。
输出有问题
-bash: line 1: 172.16.1.3: command not found
172.16.1.2 | SSH Authentication PROBLEM
- 这是唯一安装了 SSH 的主机,而其他主机则没有。
期望的输出
wolf@linux:~$ ./sshSession.sh
172.16.1.1 | SSH Authentication PROBLEM
172.16.1.2 | SSH Authentication OK
172.16.1.3 | SSH Authentication PROBLEM
脚本有什么问题以及如何解决?
解决方案
您似乎假设exit
将 写入ssh
会话中,但这不是它的工作方式。您在进程终止exit
后执行。ssh
请参阅将命令作为输入传递给另一个命令(su、ssh、sh 等)
此外,您似乎正在将标准输入从while
循环传递到正在运行的ssh
实例中。请参阅Shell 脚本 while read line loop 在第一行之后停止
此外,read -r
用作一般原则(尽管我想这并不重要)。并且不要重复设置SSH_ASKPASS
为相同的值。(并且通常不要export
一个变量超过一次;它是无害的,但通常比你喜欢的更多地揭示你对export
实际作用的理解。)并且,引用你的变量。
export SSH_ASKPASS='~/ePass'
while read -r host
do
if setsid ssh -T -n user@"$host" true; then
echo "$host | SSH Authentication OK"
else
echo "$host | SSH Authentication PROBLEM"
fi
done < ip.txt
推荐阅读
- laravel-livewire - 如何将 is_private 字段的复选框设为枚举“Y/N”?
- python - x轴matplotlib中的意外负值
- vue.js - 如何将 API 响应中的数据分配给状态?
- android - Android:是否可以使用来自管理应用程序的推送通知
- google-apps-script - 如何将用户名和电子邮件从 GAS 传递到 HTML 表单
- excel - OpenXmlAttributes 名称限定符列表?
- javascript - 如何将数据绑定到角度更新页面上的下拉列表?下拉菜单来自数据库
- airflow - 来自不可靠网络的 Airflow HTTP 调用
- javascript - 每次你在我的游戏中输球时,我如何让我的计时器重新启动
- jquery - 将 CSS 赋予所选图像