V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
SharkIng
V2EX  ›  问与答

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

  •  
  •   SharkIng · 2016-03-29 01:36:30 +08:00 · 2757 次点击
    这是一个创建于 3161 天前的主题,其中的信息可能已经有所发展或是发生改变。
    最近在折腾各种服务器,很喜欢在.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   ·   实用小工具   ·   2516 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 15:42 · PVG 23:42 · LAX 07:42 · JFK 10:42
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.