大家在 debian/ubuntu 下如何管理 ssh 密码

2014-09-20 10:00:05 +08:00
 yylzcom
我现在用密钥管理软件的是keepassX,terminal用的是tilda(看重的是全局F2呼出和透明效果)

但是现在问题就来了,因为是随机生成的密码记不住,不能很方便地在keepassX里连接ssh,每次都要从keepassX里复制然后到tilda里粘贴....

用private key免密码登陆,安全性是一个问题...

难道要写个脚本,然后用keepassX的cmd命令传递ssh用户名和密码到tilda里?

大家有没有更好的办法?
9076 次点击
所在节点    Linux
100 条回复
kafkakevin
2014-09-20 16:20:53 +08:00
@Radeon 我启动这个第三方程序,那么这个程序是用我的登陆用户(比如user0)启动的,如果user0的家目录的某文件A的权限是可以读,那当然能读。

但是,ssh服务是用ssh的专有用户启动的,这个用户的shell时nologin,是不能登陆的,所以,第三方程序是无法做到你所说的”继承其UID“。
Radeon
2014-09-20 16:22:58 +08:00
@kafkakevin 第三方程序被你启动了以后能读你的~/.ssh/*,这你承认么?承认的话是否承认密钥泄漏了呢? ssh服务在远程机器上,我根本不用关心ssh服务
ctexlive
2014-09-20 16:39:35 +08:00
@Radeon 用ssh口令不能避免中间人攻击。即便你认为第一次拿到的服务器公钥是“真实”的,那也只能知道单方面服务器是否真实,服务器不知道客户端是谁。如果ssh本身就可以防止中间人攻击,那从ssh代替telnet以后就不可能出现广泛的中间人攻击模式了。你现在无非基于:1. .ssh/*被自己运行的程序读取。(别人已经告诉你,用sudo等控制权限的方法或者用其他单用账户,sudo不是让你获取高权限,同样可以限制某用户使用更低权限,而且禁用了root账户更安全,从上文看你一直认为sudo会获取更高权限,这种想法是错误的)。2.你认为.ssh/*被获取,即使加了密钥密码还是可被暴力破解。既然如此,你又如何保证你的keepassX不被人获取且暴力破解呢?为什么独独担心前者而不担心后者?因为按照你的逻辑,后者同样是“密码的加密链”。3. 物理隔绝永远比保证网络安全更容易简便。不放心自己的本地电脑,那就把密钥存到第三方硬件设备,基于同样的理由,你也应该把keepassX数据库存到第三方硬解,否则也会被获取暴力破解,你不能独独担心前者而不担心keepassX,更何况密钥的密码同样是不记录在电脑中的,甚至不传输到网络上。
zwy100e72
2014-09-20 16:44:12 +08:00
各位大神争论的真是精彩,看的我眼花缭乱的。。。

网上有人表示保存密码就等于没有密码,我想这句话多少是有一定道理的。

公钥加密码登录的确能够防止有程序直接读取私钥导致泄漏,但是毕竟人类的记忆能力有限,有资料表示一般人能记住6个不同的密码已经算是极限了,而且我猜这个密码的长度不超过32位。

如果采用密码管理软件的话,需要记住的密码变成了一个。。。看起来安全程度还不如直接记密码。。

私钥加密钥口令的薄弱环节也相差不大,看起来很类似于用密码管理软件。。。

不管用私钥还是公钥,只要是ssh登录,都会验证服务器的RSA指纹,亦即服务器公钥,所以无论怎么登陆如果存在中间人攻击,都可能提示错误(或者伪造指纹后都不提示)。

方便与安全乃鱼与熊掌,不可兼得。要方便,还是选择私钥加私钥口令;要安全,请使用服务器口令加私钥加私钥口令,再加一大堆东西。。。甚至有些秘密绝对不能留下可供查证的记录。。。

以上仅为小弟愚见(本人大二),如有错误,欢迎指正。
kafkakevin
2014-09-20 17:19:00 +08:00
@Radeon 哦,那我明白了。我误以为是ssh服务。抱歉。
wzxjohn
2014-09-20 17:24:44 +08:00
最好的办法是进行双重认证,现在有很多解决方案,比如原来有一个A啥玩意的我忘了,可以装一个App,每次SSH连接到服务器之后需要输入Code,付费之后可以使用短信。就像谷歌验证器一样。或者楼主可以自己写一个程序嘛,做一个以谷歌验证器为基础的SSH验证服务相信不是很难。
Radeon
2014-09-20 17:27:22 +08:00
@ctexlive 首先你最好先学习一遍密码学原理这样我们可以统一词汇表。

1)使用登录密码,ssh基于密钥交换/推导算法建立会话秘钥,不会把登录密码在网络上传输。整个过程用服务器的公钥验证服务器,用户的账号密码验证登录用户,这是没有问题的。

2)用户开启的进程有读~/.ssh/*的权限,它要愿意2秒钟就读完并回传到它的服务器上了,你还很难检测出来。这是一个事实

3)默认配置下sudo机制导致知道sudoer的密码就等于知道root密码。不论怎么说sudo后的用户权限一定比sudo前高,这就会导致安全问题。这个问题是虚假的安全感:很多人以为禁掉root只用sudoer账号就安全了,其实根本不是这么回事。sudoer密码泄漏通常造成的影响和泄漏root密码一样的。不用sudo机制,管理员一定会加强管理root密码,用了sudo(特别是多个sudo账号),管理难度就陡然上升

4)我不推崇用Keep Pass等Keychain工具。原因很简单,我绝不在硬盘上留下任何可以被破解的原始材料。所有条件一样的情况下,临时输密码一定比用存在硬盘上的key安全
JoeyChan
2014-09-20 17:58:59 +08:00
私钥600权限+口令验证,口令就不要随机了,设置一个记得住的就够了。
ctexlive
2014-09-20 18:43:17 +08:00
@Radeon
1)使用登录密码,ssh基于密钥交换/推导算法建立会话秘钥,不会把登录密码在网络上传输。整个过程用服务器的公钥验证服务器,用户的账号密码验证登录用户,这是没有问题的。
-----------------------------
ssh口令登陆,采用的是服务器的公钥加密(密码包括其他传输内容)后传输到服务器端.有问题吗?密码验证这个环节是在服务器完成的而不是你的客户端本地. 我已经说的很明白了,属于单方验证状态, 即使假定你第一次获得的公钥是"真实"(因为ssh服务器公钥是服务器端自己制作的,和https不同),你只能识别出是否后续公钥是否有变动(和首次获取的比),服务器不能识别客户端身份.

2)用户开启的进程有读~/.ssh/*的权限,它要愿意2秒钟就读完并回传到它的服务器上了,你还很难检测出来。这是一个事实
------------------------------
已经告诉你了. 能读取~/.ssh/* 同样可以读取keepass 数据库. 这也是事实. ssh你自己的私钥,以及keepass都可采用本地密码加密.这没有本质区别. 获取后还是采取暴力破解.

3) 默认配置下sudo机制导致知道sudoer的密码就等于知道root密码。..用了sudo(特别是多个sudo账号),管理难度就陡然上升
------------------------------
不是ubuntu默认的那种获取root权限的方式,sudo可以精确定义A用户是否可用B用户执行某个程序/脚本.不仅仅是替代root那么简单的. 没人说"让你用默认配置",事实上大部分linux系统的默认配置是不启用用户权限.你可以建立一个帐户,用sudoer赋予一些管理系统命令的权限,专门用来做日常维护管理. 你也可以建立低权限的C帐户,并赋予一些程序的执行权限,ssh用于登陆服务器用. 你可以把你的ssh私钥扔那个账号下即可. 既然谈本地安全了,就别说"用默认配置",或者"保留root帐户反而会加强root密码".你这明显是想当然.
这个软方案就是用来解决你担心的"执行未知程序被读取~/.ssh/*"的问题.

4).我不推崇用Keep Pass等Keychain工具。
------------------------------
从你原文看你并没表达这个意思.从记录看,你是在讨论中才转变看法的.事实上正如我说的,既然担心本地密码加密的ssh私钥被读取,同样理由也要担心keep pass的数据库.
而且也给出一个解决方案了,用usb key这样的第三方硬件工具来管理. 或者手机等工具辅助的二次验证方式,丢了密码都不担心. 显然这些方案都比前面说的软件方案都麻烦.
Radeon
2014-09-20 18:52:48 +08:00
@ctexlive 如果同意我们都公认使用~/.ssh/*登录是很脆弱的方案,那么抬杠就可以中止了。我选择临时输入密码,你选择二次验证或者硬件密钥这不冲突
ctexlive
2014-09-20 19:02:36 +08:00
@Radeon 我没觉得密钥验证方式脆弱。我倒是觉得很安全,而且你用keepass管理的密码也谈不上临时,keepass数据库存储本来就和ssh密钥(本地密码二次加密)存在一样的问题,我就是搞不懂你所谓的更安全怎么得出来。
LazyZhu
2014-09-20 19:07:28 +08:00
1. 如果只是本地ssh登录远程服务器的话,只需要服务器配置publickey,而无需privatekey。。。
2.如果服务器需要用到privatekey的话,keeppass有keeagent插件,支持windows/Ubuntu/Mint/Debian,privatekey以附件方式存于keepass加密数据库中。。。
http://lechnology.com/software/keeagent/usage/options-and-settings/
Radeon
2014-09-20 19:15:18 +08:00
@ctexlive 我从头就不赞成Keep Pass啊
oott123
2014-09-20 20:39:23 +08:00
看到后面我都以为 @Radeon 是楼主了……
真正的楼主@yylzcom 好像早已不见了……
Tink
2014-09-20 22:27:41 +08:00
私钥很靠谱啊
ryd994
2014-09-21 04:18:06 +08:00
@Radeon 能读完文档再说话么?
http://linux.die.net/man/5/sudoers
SharkIng
2014-09-21 09:12:48 +08:00
正常的管理Linux服务器都是证书/私钥 加 私钥密码,从没听说过比私钥还安全的了
当然你要说你设置一个非常长的密码到也行,可是不方便记忆不说,密码也有泄露的一天啊,那怎么办?
如果这么说岂不是误解了??
Radeon
2014-09-21 11:00:50 +08:00
@ryd994 读完了。你想说什么
Radeon
2014-09-21 11:01:27 +08:00
@SharkIng 说了半天说的是私钥被其他程序轻易拷走的风险啊
ryd994
2014-09-21 12:10:28 +08:00
@Radeon
明白sudo能干啥没?有sudor到某一个用户的权限不代表有sudo到root的权限。
这样就可以避免私钥随便被拷走了。
除了root没有人能拷走,而且可以规定sudo只允许执行ssh。
密码再长也是人记的,而私钥2048位就可以称安全了(目前破解最多不到1024)。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://tanronggui.xyz/t/134601

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX