在 CentOS 系统中,通过 SSH 远程执行命令有多种方法。以下是几种常用的方法:
ssh
命令行工具最基本的方法是使用 ssh
命令连接到远程服务器并执行单个命令。语法如下:
ssh username@remote_host "command_to_execute"
示例:
ssh user@192.168.1.100 "ls -l /home/user"
说明:
username
是你在远程服务器上的用户名。remote_host
是远程服务器的 IP 地址或主机名。"command_to_execute"
是你想在远程服务器上执行的命令。为了提高安全性并避免每次连接时输入密码,可以使用 SSH 密钥认证。
步骤:
生成 SSH 密钥对(如果还没有):
ssh-keygen -t rsa -b 4096
按提示操作,通常密钥会保存在 ~/.ssh/id_rsa
和 ~/.ssh/id_rsa.pub
。
将公钥复制到远程服务器:
ssh-copy-id username@remote_host
输入远程服务器用户的密码完成复制。
使用 SSH 密钥连接并执行命令:
ssh username@remote_host "command_to_execute"
ssh-agent
管理多个 SSH 密钥如果你有多个 SSH 密钥,可以使用 ssh-agent
来管理它们。
步骤:
启动 ssh-agent
并添加私钥:
eval "$(ssh-agent -s)"
ssh-add ~/.ssh/id_rsa
连接并执行命令:
ssh username@remote_host "command_to_execute"
sshpass
工具(不推荐用于生产环境)sshpass
允许你在命令行中指定密码,但不安全,因为密码可能会暴露在命令历史中。
安装 sshpass
:
sudo yum install sshpass
使用方法:
sshpass -p 'your_password' ssh username@remote_host "command_to_execute"
注意: 尽量避免使用这种方法,尤其是在脚本中,建议使用 SSH 密钥认证。
对于需要交互的命令,可以使用 expect
脚本来自动化。
安装 Expect:
sudo yum install expect
示例脚本 ssh_exec.exp
:
#!/usr/bin/expect -f
set timeout 20
set user [lindex $argv 0]
set host [lindex $argv 1]
set password [lindex $argv 2]
set command [lindex $argv 3]
spawn ssh $user@$host
expect "assword:"
send "$password\r"
expect "$ "
send "$command\r"
interact
使用方法:
chmod +x ssh_exec.exp
./ssh_exec.exp username remote_host your_password "ls -l /home/user"
注意: 同样,尽量避免在脚本中明文存储密码,推荐使用 SSH 密钥。
tmux
或 screen
在远程服务器上保持会话如果你需要在远程服务器上长时间运行命令或保持会话,可以使用 tmux
或 screen
。
安装 tmux
:
sudo yum install tmux
使用方法:
ssh username@remote_host
tmux new -s session_name
# 在 tmux 会话中执行命令
# 按 Ctrl+b 然后 d 断开会话
之后可以通过以下命令重新连接:
ssh username@remote_host
tmux attach -t session_name
对于复杂的自动化任务,Ansible 是一个强大的工具,支持通过 SSH 远程执行命令和管理多台服务器。
安装 Ansible:
sudo yum install epel-release
sudo yum install ansible
配置 Ansible:
编辑 ~/.ansible/hosts
文件,添加远程主机:
[my_servers]
192.168.1.100
192.168.1.101
执行命令:
ansible my_servers -m command -a "command_to_execute"
示例:
ansible my_servers -m command -a "uptime"
根据具体需求选择合适的方法:
ssh
命令。tmux
或 screen
。确保在执行远程命令时遵循最佳安全实践,如最小化权限、保护敏感信息等。