在 Ubuntu 上实现 SSH 自动化,通常有以下几种常见场景和做法,我按从简单到进阶给你梳理一下。
ssh-keygen -t rsa -b 4096
一路回车即可(默认 ~/.ssh/id_rsa)
ssh-copy-id user@remote_host
ssh user@remote_host
✅ 不再需要密码
适合脚本里必须输密码的情况。
sudo apt install sshpass
sshpass -p 'password' ssh user@host 'command'
⚠️ 密码明文字符串不安全,仅测试用。
#!/bin/bash
HOST=user@192.168.1.10
ssh $HOST <<'EOF'
uptime
df -h
systemctl status nginx
EOF
适合:
sudo apt install expect
#!/usr/bin/expect
spawn ssh user@192.168.1.10
expect {
"yes/no" { send "yes\r"; exp_continue }
"password:" { send "yourpassword\r" }
}
interact
sudo apt install ansible
/etc/ansible/hosts
[servers]
192.168.1.10
192.168.1.11
ansible servers -m ping
ansible servers -m shell -a "uptime"
✅ 无需写 SSH 脚本
✅ 可批量管理成百上千台服务器
crontab -e
0 2 * * * ssh user@host '/backup.sh'
⚠️ 必须已配置免密登录
| 场景 | 推荐方式 |
|---|---|
| 登录不输密码 | SSH 密钥 |
| 脚本执行命令 | ssh + 脚本 |
| 自动输密码 | expect |
| 批量服务器 | Ansible |
| 定时任务 | cron + ssh |
如果你能说下具体用途(比如:自动部署?批量执行?跳板机?内网?),我可以直接给你一套可复制的方案。