当提供命令作为SSH命令的参数时,SSH会显示所有键入的密码


45

如果我运行此命令:

ssh user@server 'mysql -u user -p'

当它要求我提供MySQL密码并开始输入时,该密码在屏幕上可见。我该如何预防?如果我登录ssh并执行MySQL命令,则一切正常。


5
您认为标题不清楚吗?您可以说它使包括密码在内的所有文本都可见。ssh是如何知道您输入的是密码而不是其他命令或数据?
barlop

@barlop我愿意提出建议。
user110971 '16

@barlop很好,它在您SSH到服务器后执行命令时有效。当命令作为参数提供时,我正在寻找一种使ssh行为相同的方法。
user110971 '16

它可能没有必要,但是您可以从控制台中包含完整的复制/粘贴示例,例如,不仅显示ssh命令,还显示响应,以及随后的mysql提示符。您可以将密码更改为swisscheese,以免将其放置在我目前无法测试的网站上
barlop

@barlop这与您期望的消息相同,即ssh password和MySQL密码提示
user110971 16-10-25

Answers:


100

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

ssh -t user@server 'mysql -u user -p'

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


15
或者,您可以编辑〜/ .ssh / config将该特定主机配置为始终请求TTY。参见RequestTTYman 5 ssh_config
CVn

7
@MichaelKjörling(和Toby):可能会添加一些警告,即添加“ -t”仅应保留给交互式用法,因为它有副作用。对于其中一些副作用的详细了解,请访问:unix.stackexchange.com/a/122624/27616(来自StephaneChazelas)
Olivier Dulac

同意-我建议您不能根据远程命令(而不是由主机)添加设置(例如这样),这是很可惜的。
Toby Speight

28

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

如果您可以信任[*]远程计算机的安全性,则可以按照手册的《最终用户密码安全性准则》一章的建议将密码存储在受适当保护的选项文件中,而无需进行通讯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分配。 这可用于在远程计算机上执行任意基于屏幕的程序,这可能非常有用,例如在实现菜单服务时。 即使ssh没有本地tty,多个-t选项也会强制tty分配。

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

ssh user@server "sudo ls"  
password: password  

并显示密码

解决方案是强制ssh使用-t标志分配伪tty:

ssh -t user@server sudo ls

注意:

[*]如果您可以依靠将密码保留在一个文件中,该文件只有您自己可以访问,并且可以在工作客户端上以root用户身份访问。
如果可以重新启动更改操作系统的远程计算机或删除HDD,则不能认为该计算机是完全安全的...但是在这种情况下,数据库本身将不安全。


1
可能会增加一些警告,即添加“ -t”仅应保留给交互式用法,因为它有副作用。对于其中一些副作用的详细了解,请访问:unix.stackexchange.com/a/122624/27616(来自StephaneChazelas)
Olivier Dulac

3

proc fs的安装选项“ hidepid”也很有价值。它使您的命令行在进程列表中对于其他用户不可见。fstab示例:

proc /proc proc hidepid=1 0 0
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.