【发布时间】:2021-09-14 17:36:54
【问题描述】:
我正在尝试从可从ssh 访问的远程服务器检索文件file.txt,并将其内容复制到本地文件。但我希望这个过程在.sh 文件中完成。
问题源于file.txt 只能从根访问,这意味着为了手动查看文件的内容,我必须运行:sudo cat file.txt,并通过终端输入我的密码。因此,scp 之类的命令将无法完成这项工作,因为它们会引发 Permission Denied 错误。
为了绕过这个,我做了以下事情。
ssh -t user@remote 'sudo cat file.txt'
但是,在 bash 文件中,我打算将结果保存在一个变量中,如下所示:
CONTENT=$(ssh -t user@remote 'sudo cat file.txt')
在询问我的密码后,它将文件的内容存储在变量CONTENT中。
如果用户输入他们的密码并按下回车键,这会起作用,变量会填充file.txt 的内容;但终端中不再打印密码界面。这意味着运行此 bash 文件的人看不到该行:
[sudo] password for user:
或输入密码错误时的下一行。
Sorry, try again.
[sudo] password for user:
更糟糕的是,有时密码的前几个字符实际上会被输入终端!
有没有办法解决这个问题?有没有办法让用户真正看到密码界面?
有趣的是,[sudo] password for user:和Sorry, try again.这行可以在变量CONTENT中看到,所以不仅密码界面消失了,还污染了变量CONTENT。不过这不是问题,因为我们可以简单地解析CONTENT。
【问题讨论】:
-
试试
ssh -t或ssh -tt -
这个问题与软件开发有关吗?
-
ssh -tt无法解决问题。我已经试过了。 @乔丹 -
@Cyrus 是的!细节与问题无关,但我试图自动化一个过程,开发人员必须手动复制粘贴来自 ssh 的多个文件的内容。 bash 文件应该自动执行此操作并相应地解析信息。