在 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
。確保在執行遠程命令時遵循最佳安全實踐,如最小化權限、保護敏感信息等。