【问题标题】:How to view logs in remote shell via ssh through a script and stay there on pressing ctrl + C如何通过脚本通过 ssh 查看远程 shell 中的日志并按 ctrl + C 停留在那里
【发布时间】:2020-11-14 02:29:43
【问题描述】:

我正在尝试自动执行一项我必须每天重复执行的简单任务:在 ssh 到远程服务器后查看日志

我已经编写了一个脚本来执行此操作,但问题是,如果在查看日志时按ctrl + C,它会将我从服务器中注销。所以这是我手动执行的流程:

  1. ssh -t -p port_num user@remote
  2. sudo su
  3. docker logs -f service_name

然后我有时也会按ctrl + C 在远程服务器上执行一些命令,然后我又回去看日志。

为了尝试自动化上述三个步骤,我尝试了几种方法并且它也可以工作,但是每当我按ctrl + C 时,它不会停留在远程并断开连接。

这是我迄今为止尝试过的:
1.(最天真)

ssh -t -p port_num user@remote "sudo docker logs -f service_name"
  1. ssh -t -p port_num user@remote << HERE
    > sudo su -
    > docker logs -f service_name
    > HERE
    
  2. 我创建了一个名为 test.sh 的文件,其中包含我的手动流程的第 2 行和第 3 行,然后使用了以下命令:

ssh -t -p port_num user@remote 'bash -s' < /path_to_file/test.sh
  1. 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 '&lt;(echo "sudo docker logs -f service_name")' 也许?
  • @Amadan 非常感谢!您的解决方案确实有效,足以满足我的需求,但我希望多一点。使用您的解决方案,我在服务器上被识别为bash-4.2$(我在查看日志时按ctrl + C 后看到),并且我没有root 权限。我想在按 ctrl + C 后以 root 用户身份登录,就像我通常在通过手动流程时所做的那样。
  • 中断 sudo 命令后你不能成为 root,除非你使用 root@remote 启动 ssh。无论如何,我会考虑使用屏幕

标签: bash shell ssh


【解决方案1】:

对我来说很好用:

ssh -t "servername" -l "username" "sudo docker logs -f service_name"
pause

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-02-13
    • 2011-05-24
    • 1970-01-01
    • 1970-01-01
    • 2011-05-09
    • 2015-08-19
    • 2016-05-23
    • 2016-11-05
    相关资源
    最近更新 更多