![当命令作为 SSH 命令的参数提供时,SSH 会使所有输入的密码可见](https://linux22.com/image/1510885/%E5%BD%93%E5%91%BD%E4%BB%A4%E4%BD%9C%E4%B8%BA%20SSH%20%E5%91%BD%E4%BB%A4%E7%9A%84%E5%8F%82%E6%95%B0%E6%8F%90%E4%BE%9B%E6%97%B6%EF%BC%8CSSH%20%E4%BC%9A%E4%BD%BF%E6%89%80%E6%9C%89%E8%BE%93%E5%85%A5%E7%9A%84%E5%AF%86%E7%A0%81%E5%8F%AF%E8%A7%81.png)
如果我运行这个:
ssh user@server 'mysql -u user -p'
当它要求我输入 MySQL 密码时,我开始输入,密码显示在屏幕上。我该如何防止这种情况发生?如果我通过它登录ssh
,然后执行 MySQL 命令,一切都会正常。
答案1
如果您提供要运行的远程命令,SSH 不会分配 tty,因此远程命令无法禁用 echo。您可以使用以下选项强制 SSH 提供 tty -t
:
ssh -t user@server 'mysql -u user -p'
等效选项(用于-o
或用于配置文件)是RequestTTY
。我建议不要在配置中使用它,因为它可能对非交互式命令产生不良影响。
答案2
将密码存储在受保护的选项文件中
如果您可以信任[*]远程计算机的安全性,则可以将密码存储在适当保护的选项文件中,如最终用户密码安全指南章节,而无需ssh
每次都进行交流或打字。
.my.cnf
具体来说,您可以在主目录中的文件的 [client] 部分添加一行:
[client]
password=your_pass
当然,你必须通过将文件访问模式设置为 400 或 600,以防止除你之外的任何人访问该文件,例如
chmod 600 ~/.my.cnf
然后你可以使用类似
ssh user@server 'mysql -u user110971 --defaults-file=/home/user110971/mysql-opts'
user110971
您的帐户的用户名在哪里?
强制 ssh 分配一个伪 tty ( ssh -t
)
每次您发送命令ssh
并且需要插入输入时都会发生此问题,因为默认情况下ssh
不会分配伪tty。
您可以使用选项强制分配 tty-t
,(如果需要,可以设置多个):
-t
强制伪tty分配。 这可用于在远程机器上执行任意基于屏幕的程序,这非常有用,例如在实现菜单服务时。 多个
-t
选项强制分配 tty,即使 ssh 没有本地 tty。
正如你所读到的这篇 Debian 帖子(2008 年 7 月 11 日)关于sudo
,这是一个喜欢重复出现的老问题:
ssh user@server "sudo ls" password: password
密码已显示给您
解决方案是强制 ssh 分配一个伪 tty,使用 -t 标志:
ssh -t user@server sudo ls
笔记:
[*]如果你可以依赖将密码留在只有你和 root 可以访问的文件中,在职的客户端。
如果可以通过更改操作系统或移除硬盘来重新启动远程计算机,则该计算机不能被视为完全安全……但在这种情况下,数据库本身将不安全。
答案3
proc fs 的挂载选项“hidepid”也很有用。它使你的命令行在其他用户的进程列表中不可见。fstab 示例:
proc /proc proc hidepid=1 0 0