shell脚本在本机上开启多个连接远程机器的终端并且自动输入密码
时间: 2024-03-12 17:50:15 浏览: 108
您可以使用expect工具编写一个脚本来实现这一功能。以下是一个例子:
```bash
#!/usr/bin/expect
set user username
set password yourpassword
spawn ssh $user@remotehost1
expect "password:"
send "$password\r"
interact
spawn ssh $user@remotehost2
expect "password:"
send "$password\r"
interact
# add more remote hosts as needed
```
将上面的代码保存为一个文件,例如“connect.sh”,然后在终端中运行“expect connect.sh”即可。这将启动多个SSH连接,并自动输入密码。请注意,这种做法是不安全的,因为密码是明文存储在脚本中的。建议使用SSH密钥认证来替代密码认证。
相关问题
shell脚本在本机上开启多个连接远程机器的终端
您可以使用 SSH 命令在本机上开启多个连接远程机器的终端。以下是一个示例脚本:
```shell
#!/bin/bash
# 定义远程机器的 IP 地址和用户名
remote_ip="192.168.1.100"
remote_user="user"
# 循环开启多个终端连接远程机器
for i in {1..5}
do
gnome-terminal -e "ssh $remote_user@$remote_ip"
done
```
在上面的脚本中,我们使用了 `gnome-terminal` 命令来开启终端,并使用 `ssh` 命令连接远程机器。您可以根据需要修改远程机器的 IP 地址和用户名,并在循环中指定要开启的终端数量。
shell脚本 ssh
### Shell脚本实现SSH连接及远程命令执行
#### 使用基本SSH命令进行远程命令执行
对于简单的场景,可以直接利用 `ssh` 命令来执行远程主机上的指令。这通常适用于不需要复杂逻辑控制的情况。
```bash
#!/bin/bash
REMOTE_IP="your.remote.server.ip"
REMOTE_USER="username"
# 执行单条命令
ssh ${REMOTE_USER}@${REMOTE_IP} "ls -l /home/"
```
此方式适合于快速获取信息或是运行一次性任务[^1]。
#### 利用Expect工具简化交互流程
当涉及到密码验证或其他形式的人机对话时,可以采用 `expect` 工具来自动生成这些互动环节。这种方式特别有助于批量管理多台设备或自动化部署环境配置等工作。
```bash
#!/usr/bin/expect
set timeout 30
set user [lindex $argv 0]
set ip [lindex $argv 1]
spawn ssh "$user@$ip"
expect {
"*yes/no*" { send "yes\r"; exp_continue }
"*assword:" { send "password\r" }
}
interact
```
上述代码展示了如何创建一个能够自动应答 SSH 登录提示的 Expect 脚本[^2]。
#### 强制分配伪TTY以支持图形界面应用
有时可能需要在远端启动某些依赖 TTY 的应用程序(比如编辑器),这时可以通过 `-t` 参数强制为会话分配伪终端。
```bash
#!/bin/bash
REMOTE_IP="your.remote.server.ip"
REMOTE_USER="username"
# 启动带有交互式的程序,如vim
ssh -tt ${REMOTE_USER}@${REMOTE_IP} vim somefile.txt
```
这里使用了两个 `-t` 来确保即使是在无 TTY 环境下调用也能正常工作[^3]。
#### 结合Docker容器操作的例子
如果目标是要在一个 Docker 容器内部署数据库结构,则可以在 shell 中组合多个步骤形成完整的解决方案:
```bash
#!/bin/bash
MYSQL_CONTAINER_NAME=mysql_container
COMMAND="CREATE DATABASE IF NOT EXISTS testdb; USE testdb;"
ssh root@remote_host << EOF
docker exec -it ${MYSQL_CONTAINER_NAME} mysql -uroot -e "${COMMAND}"
echo "\$(date '+%Y-%m-%d %H:%M:%S') over!!!";
EOF
```
这段脚本不仅实现了对 MySQL 数据库的操作,还记录下了结束时间戳作为日志输出的一部分[^4]。
阅读全文