远程发送linux命令
远程发送linux命令详细介绍
在 Linux 系统中,远程发送和执行命令通常通过 SSH(Secure Shell) 实现,也可以借助其他工具(如 Ansible、SaltStack、Python 库等)。以下是常用方法及示例:
一、使用原生 SSH 命令远程执行
1. 直接通过 SSH 执行单条命令
bash
用户名@目标IP或域名
- 示例:远程查看目标主机的系统版本
bashuser@192.168.1.100 - 带 sudo 执行(需输入密码或配置无密码 sudo):
bashuser@192.168.1.100
2. 执行多条命令(用分号分隔)
bash
user@目标主机
- 示例:远程创建目录并写入文件bash
user@192.168.1.100
3. 传递本地文件内容作为远程命令输入(通过管道)
bash
本地脚本.sh user@目标主机
- 示例:远程执行本地的 shell 脚本bash
deploy_script.sh admin@server.com
二、使用密钥认证(免密码登录)
为避免每次输入密码,建议配置 SSH 密钥对:
- 生成密钥(本地执行):bash
ssh-keygen rsa - 将公钥添加到目标主机的
~/.ssh/authorized_keys(可通过ssh-copy-id工具):bashssh-copy-id user@目标IP - 无需密码即可远程执行命令:bash
user@目标IP
三、批量远程执行(多主机)
1. 使用
xargs 或循环(简单场景)
bash
hosts.txt
user@
2. 使用配置管理工具(推荐)
- Ansible(需提前安装):
- 编写主机清单
inventory.ini:ini192.168.1.100
192.168.1.101
- 执行命令:bash
ansible web_servers shell
- 编写主机清单
四、编程实现(以 Python 为例)
使用 paramiko 库实现远程命令执行:
- 安装库:bash
pip paramiko - 示例代码:python
paramikohostname
username
password
client paramikoSSHClient
clientset_missing_host_key_policyparamikoAutoAddPolicy
clientconnecthostname usernameusername passwordpassword
stdin stdout stderr clientexec_command
stdoutreaddecode
stderrreaddecode
clientclose
五、注意事项
- 安全性:
- 避免在命令中硬编码密码,优先使用 SSH 密钥。
- 对敏感命令(如
rm、sudo)做好验证,避免误操作。
- 交互式命令:
- 若需交互式操作(如
vim),添加-t参数:bashuser@主机
- 若需交互式操作(如
- 网络问题:
- 确保目标主机的 SSH 端口(默认 22)开放,且防火墙允许连接。
- 命令返回值:
- 可通过
$?获取远程命令的执行状态(0 表示成功):bash主机 "
- 可通过
总结
- 简单场景:直接使用
ssh 主机 "命令",配合密钥认证提升效率。 - 批量操作:使用 Ansible、Puppet 等工具,或编写脚本循环执行。
- 编程需求:通过
paramiko(Python)、pexpect等库实现自动化。
根据具体场景选择合适的方法,确保安全性和可靠性。