远程执行Linux命令

41

如何在远程 Linux 机器上执行命令/脚本? 比如,我想从机器 A 在机器 B 上启动 Tomcat 服务。

3个回答

60

我猜ssh是最安全的方式,例如:

ssh -OPTIONS -p SSH_PORT user@remote_server "remote_command1; remote_command2; remote_script.sh"  

您需要根据特定需求(例如,仅绑定到ipv4)部署OPTIONS,并且您的远程命令可能启动您的tomcat守护进程。

注意
如果您不想在每次运行ssh时都被提示,请查看ssh-agent,如有必要可以查看keychain。关键是了解ssh密钥交换过程。请仔细查看ssh_config(即ssh客户端配置文件)和sshd_config(即ssh服务器配置文件)。配置文件名取决于您的系统,但无论如何,您都会在某个地方找到它们,例如/etc/sshd_config。理想情况下,请勿将ssh作为root运行,而应在双方服务器和客户端上以特定用户身份运行。

一些源项目主页的额外文档:

ssh and ssh-agent
man ssh

http://www.snailbook.com/index.html
https://help.ubuntu.com/community/SSH/OpenSSH/Configuring

keychain
http://www.gentoo.org/doc/en/keychain-guide.xml
一篇较老的法语教程(由我自己编写 :-) ,但也可能有用):
http://hornetbzz.developpez.com/tutoriels/debian/ssh/keychain/


32
 ssh user@machine 'bash -s' < local_script.sh

或者你可以直接

 ssh user@machine "remote command to run" 

有没有办法在同一行输入密码?这样我的脚本就不会被提示停止了。 - Andrija Jostergård

3
如果您不想处理安全问题,并希望在短期内最大限度地暴露(即“方便”),并且/或者您的所有主机上没有ssh/telnet或密钥生成,那么您可以使用netcat拼凑一个单行代码。将命令写入目标计算机的网络端口,它将运行该命令。然后,您可以阻止少数“受信任”的用户访问该端口,或将其包装在仅允许运行特定命令的脚本中,并使用低权限用户。
在服务器上:
mkfifo /tmp/netfifo; nc -lk 4201 0/tmp/netfifo
这个一行代码可以读取您发送到该端口的任何字符串,并将其管道传输到bash以执行。 stderr和stdout被倒入netfifo并通过nc发送回连接主机。
在客户端上:
要远程运行命令:
echo "ls" | nc HOST 4201

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接