当命令作为 SSH 命令的参数提供时,SSH 使所有键入的密码可见

use*_*971 47 linux ssh terminal passwords ubuntu

如果我运行这个:

ssh user@server 'mysql -u user -p'
Run Code Online (Sandbox Code Playgroud)

当它询问我输入 MySQL 密码时,我开始输入时,密码在屏幕上可见。我怎样才能防止这种情况?如果我通过登录ssh然后执行 MySQL 命令,一切正常。

Tob*_*ght 106

如果您提供要运行的远程命令,SSH 不会分配 tty,因此远程命令无法禁用回显。您可以使用以下-t选项强制 SSH 提供 tty :

ssh -t user@server 'mysql -u user -p'
Run Code Online (Sandbox Code Playgroud)

等效选项(用于-o或用于配置文件)是RequestTTY. 我警告不要在配置中使用它,因为它可能会对非交互式命令产生不良影响

  • 或者您可以编辑 ~/.ssh/config 以配置该特定主机以始终请求 TTY。请参阅 `man 5 ssh_config` 中的 `RequestTTY`。 (15认同)
  • @MichaelKjörling(和 Toby):可能会添加一些警告,即添加“-t”应仅用于交互式使用,因为它有副作用。为了更好地了解其中一些副作用:http://unix.stackexchange.com/a/122624/27616(来自 StephaneChazelas) (7认同)

Has*_*tur 29

将密码存储在受保护的选项文件中

如果您可以信任[*]远程计算机的安全性,您可以将密码存储在一个适当保护的选项文件中,如手册的密码安全最终用户指南一章中所建议的那样,而无需通过通信ssh或键入每个时间。

具体来说,您可以.my.cnf在主目录中文件的 [client] 部分添加一行:

[client]
password=your_pass
Run Code Online (Sandbox Code Playgroud)

当然,您必须通过将文件访问模式设置为 400 或 600 来防止除您之外的任何人访问该文件,例如

chmod 600 ~/.my.cnf
Run Code Online (Sandbox Code Playgroud)

然后你可以使用类似的东西

ssh user@server 'mysql -u user110971 --defaults-file=/home/user110971/mysql-opts'
Run Code Online (Sandbox Code Playgroud)

user110971您帐户的用户名在哪里。


强制 ssh 分配一个伪 tty ( ssh -t)

每次通过发送命令ssh并且需要插入输入时都会发生此问题,因为默认情况下ssh不会分配伪 tty。

您可以使用选项强制 tty 分配-t,(如果需要甚至不止一个):

-t

强制伪 tty 分配。 这可用于在远程机器上执行任意基于屏幕的程序,这非常有用,例如在实现菜单服务时。 多个-t选项强制 tty 分配,即使 ssh 没有本地 tty。

正如你在读这Debian的职位(Jul_11_2008)sudo,这是一个老问题,爱复发:

ssh user@server "sudo ls"  
password: password  
Run Code Online (Sandbox Code Playgroud)

密码显示给你

解决方案是强制 ssh 分配一个带有 -t 标志的伪 tty:

ssh -t user@server sudo ls
Run Code Online (Sandbox Code Playgroud)

笔记:

[*]如果您可以依靠将密码保留在只有您和工作客户端上的 root 才能访问的文件中。
如果可以重新启动远程计算机更改操作系统或移除硬盘驱动器,则不能认为计算机是完全安全的……但在这种情况下,数据库本身将不安全。