我有本地脚本,我想在远程服务器上运行。我已经设置了ssh密钥对来启用没有密码的登录。
我目前的方法是将脚本rsync到服务器然后运行它:
ssh user@remoteserver "rsync localserver:script.sh ./; ./script.sh; rm script.sh"
然而,这似乎是一个黑客;是否有更友好的用户方式?
更新:由于有很多好的答案,有人可以通过提供理由帮助我选择“最佳”吗?
答案 0 :(得分:10)
SSH将从stdin
ssh -T user@server <script.sh
修改:-T Disable pseudo-tty allocation
答案 1 :(得分:3)
总有办法。
ssh user@host 'sh -' < script.sh
答案 2 :(得分:1)
是的,使用烟斗:
Test.sh:
#!/bin/bash
echo "test"
管道在远程机器上进行bash:
ajw@xxxxxxx:/tmp > cat test.sh | ssh ajw@xxxxxxxx.xxx.xx "cat | bash"
test
答案 3 :(得分:1)
@Sorpigal的另一个答案
ssh user@host 'bash -s' < script.sh
答案 4 :(得分:0)
ssh -T user@server < script.sh
# "Pseudo-terminal will not be allocated because stdin is not a terminal."
你混淆了sshd
服务器,因为它假设一个交互式登录会话,stdin是一个终端 - sshd
会为这样的会话分配一个伪tty - 如果没有 command被指定为ssh
(客户端)命令的参数,但是sshd
看到其默认shell的stdin被重定向到输入重定向运算符<
指定的文件。
当sshd
客户端未提供要在远程主机上执行的命令但重定向ssh
的stdin时,从sshd
的角度来看,这是一种意外的行为来自文件或此处文档/字符串或管道的默认shell。
ssh localhost <<<'echo Hello, world!'
ssh localhost sh <<<'echo Hello, world!'
ssh -T localhost <<<'echo Hello, world!'