请教,如何使用 SSH Key + Config 能够更安全?? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
SharkIng
V2EX    问与答

请教,如何使用 SSH Key + Config 能够更安全??

  •  
  •   SharkIng 2016-03-29 01:36:30 +08:00 3101 次点击
    这是一个创建于 3486 天前的主题,其中的信息可能已经有所发展或是发生改变。
    最近在折腾各种服务器,很喜欢在.ssh/config 里面配置上不同服务器地址,搭配上 Key ,方便以后使用。密码都免了。

    其实看到 V2 上很多人也都用这个办法,可是突然想到一个问题:这个怎么能够更安全的做好加密呢??

    我说的加密不是链接上的加密,也不是服务器本身的加密,而是对于电脑端的。举例说,你要是有好几十个服务器,有可能用不同的 Key 也有可能用同一个 Key ,所有 Key 都存在你的.ssh 文件夹里。那么!:如果你电脑丢了岂不是 Key 也就丢了?

    那么问题来了:
    1 , 如何更安全的备份。放在 Dropbox 之类的地方肯定不算最安全的,现在能想到的就是放在 U 盘中,但是 U 盘也是有丢的可能啊。

    2 , 如果电脑丢了,那是不是就说明 Key 泄漏了呢?这种问题怎么办?有没有什么可靠的加密办法能够加密.ssh 中的文件的??

    3 ,有没有什么办法能够批量在服务器上修改 SSH Key ?(如果丢了之后需要修改)

    4 , 如果丢了,也没有备份,那么是不是完全就丢失这个服务器的访问权了?

    PS:另外问一下 .ssh/config 中配置Key文件的时候,如果文件PATH中有空格和特殊符号怎么办?
    24 条回复    2016-03-29 15:52:50 +08:00
    New2016
        1
    New2016  
       2016-03-29 01:44:29 +08:00   1
    vps 商都有 VNC 控制台 /其他替代的管理方式的
    密钥设置密码,密钥丢了就 vnc 上去开启密码登录
    msg7086
        2
    msg7086  
       2016-03-29 02:26:07 +08:00   1
    服务器上同时存公钥和私钥。
    泄露了就生成新的密钥然后覆盖到远程目录里就好了。
    LINAICAI
        3
    LINAICAI  
       2016-03-29 02:32:32 +08:00   1
    @msg7086 他应该已经禁止了 root 远程登录了,又丢了私钥还怎么生成新的秘钥?
    服务器存私钥。。。总不太好的感觉
    msg7086
        4
    msg7086  
       2016-03-29 02:41:28 +08:00
    @LINAICAI 丢私钥?很难丢的。
    服务器存私钥还好吧,反正只有 Root 可见。要能用 Root 登录,那说明私钥已经泄露了。
    SharkIng
        5
    SharkIng  
    OP
       2016-03-29 03:07:42 +08:00
    @LINAICAI
    @msg7086
    的确基本禁止了 root 登陆,单独用户+密钥登陆是我最近比较常用的办法。

    两个全部存在服务器上感觉安全性还是低一些,密钥还是想自己存。

    其实这都不是重点,主要是自己电脑(笔记本/家里台式机)上的密钥如何能保证安全。毕竟现在这个社会,你说你电脑完全不丢失不可能的,丢了,就有风险密钥被别人看到/使用


    @New2016 密钥设置密码这个因为一些原因无法办到.... 例如公司里现有密钥就没有密码。当然还有设置密钥的初衷就是免密码登陆,给密钥再设置一个密码感觉有点麻烦了
    msg7086
        6
    msg7086  
       2016-03-29 03:50:02 +08:00
    @SharkIng 丢了就重新生成密钥对然后复制上去就行了呗,覆盖掉老的 authorized_keys 就行了。
    SharkIng
        7
    SharkIng  
    OP
       2016-03-29 04:49:24 +08:00
    @msg7086 一两个机子还好,如果是好几百个机子的话,有没有比较便捷的办法?
    msg7086
        8
    msg7086  
       2016-03-29 05:26:08 +08:00   1
    @SharkIng 你如果有地址列表的话一个循环就能解决了吧。
    shiji
        9
    shiji  
       2016-03-29 05:58:49 +08:00   2
    ================
    SSH 私钥的基本操作建议:
    给最安全的电脑放上云主机(比如 DO )默认的/最基本的那个私钥。
    然后用这个最安全的电脑把别的电脑的公钥们分发到各个服务器去。
    然后你每个电脑就用属于自己的私钥,丢了/泄露了 就用别的电脑 增加/删除服务器们的 authorized_keys

    核心就是,一个本地设备 /严格说是 SSH Client ,一对密钥,不要把你的私钥放在 U 盘里拷来拷去到别的电脑,这样极其不安全。
    ================


    1 , 如何更安全的备份。放在 Dropbox 之类的地方肯定不算最安全的,现在能想到的就是放在 U 盘中,但是 U 盘也是有丢的可能啊。

    不需要备份,丢了就让它丢了。

    2 , 如果电脑丢了,那是不是就说明 Key 泄漏了呢?这种问题怎么办?有没有什么可靠的加密办法能够加密.ssh 中的文件的??

    建议给私钥设置强密码,这样即使泄露了,穷举密码破解也得需要至少几天时间。另外 windows 可以使用系统自带的加密(右键属性里面的,加密之后文件名变绿的那个),这样你即使没有全盘加密,别人拿走你的硬盘也搞不到私钥。

    3 ,有没有什么办法能够批量在服务器上修改 SSH Key ?(如果丢了之后需要修改)

    上百个服务器你得动手写个小脚本,我就五六台,用 iterm 全部打开,然后有个广播功能,能把输入的指令广播给每一个 ssh 窗口。 添加公钥的方法也有很多, ssh-copy-id 可以,甚至直接 wget 下载你之前上传好到某个 web 服务器的公钥也是可以的。

    4 , 如果丢了,也没有备份,那么是不是完全就丢失这个服务器的访问权了?

    如果那么不巧,你所有电脑的私钥都同时丢了/泄露了:
    大部分云主机都还好可以直接重置,或者支持远程管理模块/远程 KVM 之类的独服也还有救。如果这些都没有,你就得去机房走一趟了。

    PS :另外问一下 .ssh/config 中配置 Key 文件的时候,如果文件 PATH 中有空格和特殊符号怎么办?
    按照常理来说:套双引号 或者 空格前加 \ 试试。
    DravenJohnson
        10
    DravenJohnson  
       2016-03-29 06:17:53 +08:00   1
    我们公司是用一个自己写的程序保存密钥,会加密上传到公司服务器上,然后本地需要使用的时候会有一个临时文件,当平台关闭临时文件自动删除。解决备份,分享,和个人电脑丢失问题
    SharkIng
        11
    SharkIng  
    OP
       2016-03-29 06:29:41 +08:00
    感谢各位回复:


    @msg7086 现在只能这样写一个小脚本解决了,主要是想考虑好免得以后出问题


    @shiji 空格那个问题加 \ 和 “” 都试了不行,暂时放弃了。不备份的话如果丢失,解决起来会有多少难度呢??另外加密这个的确做不到(不是不想做)所以还是需要考虑如果电脑丢了的安全问题
    chengn1996342
        12
    chengn1996342  
       2016-03-29 06:47:01 +08:00 via iPad   1
    用智能卡,类似于 yubikey 这种
    jasontse
        13
    jasontse  
       2016-03-29 07:28:26 +08:00 via iPad   1
    Passphrase
    ryd994
        14
    ryd994  
       2016-03-29 08:24:56 +08:00 via Android   1
    智能卡大法好,输错三次密码锁住,再输错三次管理密码自毁
    不怕泄密只要不被社工
    备份………你不会在家里藏个 U 盘么?真要丢了再买个 yubikey 就好
    ghostheaven
        15
    ghostheaven  
       2016-03-29 08:25:28 +08:00   1
    lastpass
    rainysia
        16
    rainysia  
       2016-03-29 09:38:39 +08:00   1
    要安全, 走 kerberos
    lhbc
        17
    lhbc  
       2016-03-29 09:47:05 +08:00 via Android   1
    一机一 key ,本地 BitLocker 加密同步到 Dropbox
    kkxxxxxxx
        18
    kkxxxxxxx  
       2016-03-29 09:54:07 +08:00   1
    BtSync 一份到手机
    SpicyCat
        19
    SpicyCat  
       2016-03-29 12:32:48 +08:00   1
    @msg7086 把私钥 存到服务器的目的是啥?私钥要是丢了,改掉 authorized_keys 文件不就行了吗?
    SpicyCat
        20
    SpicyCat  
       2016-03-29 12:34:27 +08:00
    安全和便利是矛盾的,而且提升安全也意味着提升成本。
    SharkIng
        21
    SharkIng  
    OP
       2016-03-29 14:04:40 +08:00
    @chengn1996342 我有但是还没研究好怎么用来做 SSH ,而去这东西也容易丢啊

    @lhbc 的确希望做到一机一 Key ,但是怕多了之后不好管理也不好保存,而且 Bitlocker 不是 Windows 下的么?

    @jasontse 这个是什么呢? Google 了下没收到

    @ryd994 有教程怎么做么?

    @SpicyCat 当然安全不可能便利,但是在相对便利的情况下肯定也要考虑安全啊,我不能说这么做绝对安全,但是完全不考虑安全应该不可取。如果安全便利只能选一的话,我宁愿选择安全。所以现在我很多机子没有入 Config ,也是这个原因,但是说实话,真的很不便利
    SpicyCat
        22
    SpicyCat  
       2016-03-29 14:23:16 +08:00
    @SharkIng SSH 安全的关键之一是 key 要安全, config 文件是为了方便,不用 config 文件,效果是你要多敲点字符来登陆服务器,不是就更安全了。而且有 config 文件帮忙,一机一 key 也能方便实现。
    如果真要安全,就每个私钥都加 passphrase ,用 ssh-agent 可以实现只输入一次 passphrase 。
    同时可以参考下面链接
    https://www.zhihu.com/question/31175397
    DesignerSkyline
        23
    DesignerSkyline  
       2016-03-29 15:47:49 +08:00
    @SharkIng Yubikey 可以用根线挂钥匙链上
    clino
        24
    clino  
       2016-03-29 15:52:50 +08:00
    用 truecrypt 弄一个加密盘,把 .ssh 放里面 这样解密映射完才能用,加密盘文件用 dropbox 之类的同步备份
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     1291 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 34ms UTC 23:45 PVG 07:45 LAX 16:45 JFK 19:45
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86