在 CentOS 系统中,通过 SSH 远程执行命令是一种常见的操作。以下是几种常用的方法:
ssh
命令直接执行单个命令你可以在 ssh
命令后直接添加要执行的命令。例如,要在远程主机上列出当前目录的内容,可以使用:
ssh username@remote_host "ls -l"
说明:
username
是你在远程主机上的用户名。remote_host
是远程主机的 IP 地址或域名。"ls -l"
是你想在远程主机上执行的命令。为了提高安全性并避免每次连接时输入密码,可以使用 SSH 密钥对进行认证。
步骤:
生成 SSH 密钥对(如果尚未生成)
在本地机器上运行以下命令生成密钥对:
ssh-keygen -t rsa
按提示操作,通常会生成 ~/.ssh/id_rsa
(私钥)和 ~/.ssh/id_rsa.pub
(公钥)。
将公钥复制到远程主机
使用 ssh-copy-id
命令将公钥复制到远程主机的 ~/.ssh/authorized_keys
文件中:
ssh-copy-id username@remote_host
系统会提示输入远程主机的密码,成功后即可免密登录。
使用 SSH 密钥执行远程命令
现在,你可以直接执行远程命令而无需输入密码:
ssh username@remote_host "your_command_here"
ssh-agent
管理多个 SSH 密钥如果你有多个 SSH 密钥,可以使用 ssh-agent
来管理它们,避免每次切换密钥时都需要重新加载。
步骤:
启动 ssh-agent
eval "$(ssh-agent -s)"
添加 SSH 私钥到 ssh-agent
ssh-add ~/.ssh/id_rsa
连接远程主机并执行命令
ssh username@remote_host "your_command_here"
ssh
的 -t
选项强制分配伪终端有时,执行某些命令(如需要交互的命令)时,可能需要强制分配一个伪终端。
ssh -t username@remote_host "your_command_here"
ssh
配置文件简化连接为了简化多次连接的操作,可以在 ~/.ssh/config
文件中配置主机别名和相关参数。
示例:
编辑或创建 ~/.ssh/config
文件,添加以下内容:
Host myserver
HostName remote_host
User username
Port 22
IdentityFile ~/.ssh/id_rsa
之后,你可以简单地使用以下命令连接:
ssh myserver "your_command_here"
rsync
或 scp
进行文件传输并执行命令虽然 rsync
和 scp
主要用于文件传输,但也可以结合 SSH 执行远程命令。
示例:使用 rsync
执行远程命令
rsync -avz -e ssh username@remote_host:/path/to/local /path/to/remote --rsync-path="ssh 'your_command_here'"
~/.ssh
目录权限为 700
,authorized_keys
文件权限为 600
。通过以上方法,你可以方便地在 CentOS 系统中通过 SSH 远程执行命令,提高工作效率和安全性。