在 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 远程执行命令,提高工作效率和安全性。