在Ubuntu系统中,使用SSH脚本自动化任务可以显著提高系统管理员的工作效率。以下是一个详细的教程,涵盖了从基础到高级的SSH脚本自动化技巧。
生成SSH密钥对:
使用 ssh-keygen
命令生成密钥对:
ssh-keygen -t rsa -b 4096
这将生成 id_rsa
(私钥)和 id_rsa.pub
(公钥)文件。
配置SSH无密码登录:
将公钥复制到远程服务器:
ssh-copy-id user@remote_host
在本地 ~/.ssh/config
文件中配置远程服务器信息:
Host myserver
HostName remote_host
User user
IdentityFile ~/.ssh/id_rsa
使用配置文件连接:
ssh myserver
创建Shell脚本:
使用文本编辑器(如 nano
或 vim
)创建一个脚本文件,例如 ssh_automation.sh
:
#!/bin/bash
ssh user@remote_host 'command_to_execute'
确保脚本有执行权限:
chmod +x ssh_automation.sh
运行脚本:
./ssh_automation.sh
使用Cron作业定期执行脚本:
编辑当前用户的 crontab
文件:
crontab -e
添加定时任务,例如每天凌晨2点执行脚本:
0 2 * * * /path/to/ssh_automation.sh >> /path/to/logfile.log 2>&1
这将把标准输出和错误输出都追加到 logfile.log
。
使用Paramiko库进行Python自动化:
安装Paramiko库:
pip install paramiko
示例代码:
import paramiko
# 创建SSH客户端
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
# 连接到远程服务器
ssh.connect(hostname='192.168.1.100', port=22, username='root', key_filename='/root/.ssh/id_rsa')
# 执行命令
stdin, stdout, stderr = ssh.exec_command('df -h')
print(stdout.read().decode('utf-8'))
ssh.close()
使用SFTP进行文件自动化传输:
安装 openssh-client
:
sudo apt update
sudo apt install openssh-client
创建SFTP脚本 sftp_script.sh
:
#!/bin/bash
HOST='your_sftp_server.com'
PORT='22'
USER='your_username'
PASSWORD='your_password'
REMOTE_DIR='/path/to/remote/directory'
LOCAL_DIR='/path/to/local/directory'
# 创建临时密码文件
echo "$PASSWORD" > /tmp/sftp_pass.txt
chmod 600 /tmp/sftp_pass.txt
# 使用SFTP连接并执行命令
sftp -oPort=$PORT -oStrictHostKeyChecking=no -b /tmp/sftp_commands.txt $USER@$HOST << EOF
cd $REMOTE_DIR
put $LOCAL_DIR/*
bye
EOF
# 删除临时文件
rm /tmp/sftp_pass.txt
rm /tmp/sftp_commands.txt
赋予脚本执行权限并运行:
chmod +x sftp_script.sh
./sftp_script.sh
通过以上步骤,你可以在Ubuntu系统中实现基本的SSH脚本自动化,并逐步掌握更高级的技巧,如使用Python的Paramiko库进行自动化操作和SFTP文件传输。这些技能将帮助你更高效地管理远程服务器和执行复杂任务。