【发布时间】:2020-11-14 02:29:43
【问题描述】:
我正在尝试自动执行一项我必须每天重复执行的简单任务:在 ssh 到远程服务器后查看日志。
我已经编写了一个脚本来执行此操作,但问题是,如果在查看日志时按ctrl + C,它会将我从服务器中注销。所以这是我手动执行的流程:
ssh -t -p port_num user@remotesudo sudocker logs -f service_name
然后我有时也会按ctrl + C 在远程服务器上执行一些命令,然后我又回去看日志。
为了尝试自动化上述三个步骤,我尝试了几种方法并且它也可以工作,但是每当我按ctrl + C 时,它不会停留在远程并断开连接。
这是我迄今为止尝试过的:
1.(最天真)
ssh -t -p port_num user@remote "sudo docker logs -f service_name"
ssh -t -p port_num user@remote << HERE > sudo su - > docker logs -f service_name > HERE我创建了一个名为
test.sh的文件,其中包含我的手动流程的第 2 行和第 3 行,然后使用了以下命令:
ssh -t -p port_num user@remote 'bash -s' < /path_to_file/test.sh
ssh -t -p port_num user@remote "sudo docker logs -f service_name; bash"
我的想法已经用完了,任何帮助都值得表扬。
【问题讨论】:
-
那么,您希望 ssh 带有一个初始命令,但是当该命令完成后,您想留在 ssh 会话中吗?
ssh -t -p port_num user@remote bash --init-file '<(echo "sudo docker logs -f service_name")'也许? -
@Amadan 非常感谢!您的解决方案确实有效,足以满足我的需求,但我希望多一点。使用您的解决方案,我在服务器上被识别为
bash-4.2$(我在查看日志时按ctrl + C后看到),并且我没有root 权限。我想在按ctrl + C后以 root 用户身份登录,就像我通常在通过手动流程时所做的那样。 -
中断 sudo 命令后你不能成为 root,除非你使用 root@remote 启动 ssh。无论如何,我会考虑使用屏幕