SSH 使用密钥登录并禁止口令登录实践 - V2EX
请不要在回答技术问题时复制粘贴 AI 生成的内容
wsgzao

SSH 使用密钥登录并禁止口令登录实践

  •  
  •   wsgzao
    wsgzao Jul 7, 2015 7022 views
    This topic created in 3974 days ago, the information mentioned may be changed or developed.


    ## 前言
    无论是个人的VPS还是企业允许公网访问的服务器,如果开放22端口的SSH密码登录验证方式,被众多黑客暴力猜解捅破菊花也可能是经常发生的惨剧。企业可以通过防火墙来做限制,普通用户也可能借助修改22端口和强化弱口令等方式防护,但目前相对安全和简单的方案则是让SSH使用密钥登录并禁止口令登录。

    >这是最相对安全的登录管理方式

    ---

    ## 更新历史

    2015年07月07日 - 初稿

    阅读原文 - http://wsgzao.github.io/post/ssh/

    扩展阅读

    - SSH原理与运用 - http://www.ruanyifeng.com/blog/2011/12/ssh_remote_login.html
    - Linode - https://www.linode.com/docs/networking/ssh/use-public-key-authentication-with-ssh
    34 replies    2015-07-08 14:11:40 +08:00
    realpg
        1
    realpg  
    PRO
       Jul 7, 2015
    技术安全性上用私钥登陆确实安全性比较高
    但是实际场景下,秘钥登陆可能更坑,除非你自己维护就你自己登陆就你自己使用。一个保管不当的秘钥的危害性更大。
    所以一般我都是禁用私钥登陆强制口令登陆的
    onemoo
        2
    onemoo  
       Jul 7, 2015
    @realpg 那得保管的多差才能私钥和passphrase一起泄露。如果真的是这么差劲的话,恐怕密码泄露会更容易。
    finian
        3
    finian  
       Jul 7, 2015
    @realpg 可以给密钥加 passphrase
    szopen
        4
    szopen  
       Jul 7, 2015
    我在考虑一个问题,就是当只能用私钥登录时, 密钥没备份,但是电脑坏了怎么办?
    mongodb
        5
    mongodb  
       Jul 7, 2015
    @szopen 没备份这个不能怪别人只能怪自己..
    ryd994
        6
    ryd994  
       Jul 7, 2015 via Android
    @szopen 加两个私钥,一个常用一个放u盘应急
    cloverstd
        7
    cloverstd  
       Jul 7, 2015 via iPhone
    @szopen 放在网盘或者邮箱
    Tink
        8
    Tink  
    PRO
       Jul 7, 2015
    @szopen 不备份也敢禁用口令登陆?
    szopen
        9
    szopen  
       Jul 7, 2015
    林子大了什么情况都能发生
    maxsec
        10
    maxsec  
       Jul 7, 2015   1
    楼主敢不敢放一个微信扫描terminal输出的二维码登录ssh的linux组件
    johnsmith123
        11
    johnsmith123  
       Jul 7 2015
    这些和1+1=2 没啥区别(废话)
    AssassinLOVE
        12
    AssassinLOVE  
       Jul 7, 2015
    这是新发明?
    abv
        13
    abv  
       Jul 7, 2015
    一直用私钥登录,不然每次得输入密码,就是机器变了的话很头疼
    clino
        14
    clino  
       Jul 7, 2015
    @szopen 没备份跟忘记密码是一样的下场
    whattheh3ll
        15
    whattheh3ll  
       Jul 7, 2015
    我都是禁用 root 登入,其他账号开两步验证。
    nozama
        16
    nozama  
       Jul 7, 2015
    万一私钥泄漏, 危及范围就有点广了.
    我的办法是:
    0. 在iCloudDrive保存一个文件.
    1. 每次要用密码, 就用md5 filename生成密码
    2. 用这个密码登录.
    这样就算iCloud泄漏了, 一般也没人知道我是这样生成密码的...
    wsgzao
        17
    wsgzao  
    OP
       Jul 7, 2015
    @nozama 私钥一般加passphrase,不用太担心私钥泄露
    Tink
        18
    Tink  
    PRO
       Jul 7, 2015
    @maxsec 好像很不错的主意,偶试试看
    airyland
        19
    airyland  
       Jul 7, 2015
    @Tink 期待一下~
    wsgzao
        20
    wsgzao  
    OP
       Jul 7, 2015 via Android
    @maxsec 这个方法不错
    kn007
        21
    kn007  
       Jul 7, 2015
    需要通过另外一台vps连接主vps ssh,虚假22端口,真正端口放高位。
    kingwrcy
        22
    kingwrcy  
       Jul 7, 2015
    如果不是 默认地址 /root/.ssh/id_rsa
    的话,要配置什么?我放在别的地方,然后一样copy到vps,无法登陆,默认位置就可以.
    lilydjwg
        23
    lilydjwg  
       Jul 7, 2015
    我的私钥还真泄漏过一次,不小心把私钥当公钥复制给朋友了(所以我有了复制公钥的专用命令)。还好她是可信的,所以我可以慢慢换私钥。

    我的私钥都是没有密码的,累啊。GPG 私钥有密码保护,因为用得少。

    备份当然是有的,和整个系统一起加密备份的。

    密码登陆太累了。而且对于没有安全意识的人你根本没办法。还有人记不住密码所以直接把密码写便笺贴显示器上呢。而且密码很容易被附近的人取得的,偷看不成还能偷听。
    realpg
        24
    realpg  
    PRO
       Jul 7, 2015
    @onemoo
    @finian
    秘钥自然都是有passphrase的,大多数不是泄露的原因,而是透露给了不该透露的人,或者被透露的人应该失去访问权的时候没有失去

    发出去的key,passphrase也没法修改,除非整体在服务器端作废key重发,反倒不如靠一个靠谱密码加上访问策略以及定期更换的制度来的省事

    以上是我的经验,可能不适用所有场合
    RAKE
        25
    RAKE  
       Jul 7, 2015
    sshd_config里面有很多措施,比如更改ssh端口,禁止密码,root登录,最大重试次数等。

    @szopen 如果是买的vps的话服务商会有个reset root password的,所以其实最需要注意的地方往往是服务商
    pandada8
        26
    pandada8  
       Jul 7, 2015
    开两步验证(
    LazyZhu
        27
    LazyZhu  
       Jul 7, 2015
    @realpg
    "发出去的key,passphrase也没法修改,除非整体在服务器端作废key重发,反倒不如靠一个靠谱密码加上访问策略以及定期更换的制度来的省事"
    这句话逻辑有问题哦, 如果是密码作废的话难道修改后不需要重发? 其实你的理由就一个吧,密码比文件的密匙对方便.
    realpg
        28
    realpg  
    PRO
       Jul 7, 2015
    @LazyZhu 密码可以很容易的作废,我们生产服务器的密码是90分钟就作废。

    我们什么套路都用过,使用密码的时期基本没出现过高风险情况,反而是使用私钥的时期出过很多问题。
    当然密码也不是唯一的安全策略,端口号,IP限制,允许访问触发条件都在前面横着呢
    msg7086
        29
    msg7086  
       Jul 8, 2015
    @realpg passphrase和key是两回事。
    passphrase相当于把key打包压缩的时候加个rar密码而已。
    要改pass只要拆开然后重新打包加密就好了。
    0bit
        30
    0bit  
       Jul 8, 2015
    楼主的教学贴其实不太适合在这里发,能感觉到是在推广自己的博客。但是实际上混这里的有几个人不会配置私钥登录呢。其实直接发个问题讨论比较好。
    onemoo
        31
    onemoo  
       Jul 8, 2015
    @realpg 我明白你的意思:被泄露的key的passphrase无法更换。

    不同的管理员一人一账户+key,有个别人的key被泄露的话,更换他的这一个key会比较容易。当然如何得知key被泄露是一个问题!!
    然而我只是觉得“靠谱的密码”的安全风险会更大。可能是使用环境本来就比较安全,所以也没出过问题罢了。


    @maxsec 还是别用微信,自己写个扫码器吧。
    finian
        32
    finian  
       Jul 8, 2015
    @realpg 你用密码一样有这样的问题,而且更容易被暴力破解
    realpg
        33
    realpg  
    PRO
       Jul 8, 2015
    @finian 能被暴力破解的密码?如果我们跟NSA或者国安那种大算力杠上了,那我确实承认没办法,日常的密码策略可以保证堆起来的十万的显卡集群在几小时内跑不出来就是了,而且怎么可能允许你多次尝试密码,自然有限制策略的

    @onemoo 不单纯是密码,必然还有一系列登陆策略跟着,关键是真心的,key和pass的原始泄露都不是被人从0开始的获取,都是流程上的漏洞,我们不是那种巨大的大公司什么服务器都是ops来做,一些时候总需要给各个团队开放一些生产服务器的ssh在有审计的情况下让各个团队上去直接操作。
    只要有些人略有恶意,总有办法留下一些key,key很难做到使用一次即废,因为密集的操作这样成本太高,持有key的登陆,都没有多次尝试,在非ssh服务器端的层面,比如iptables等三层链接判断很难进行识别。

    反而是密码,甚至可以用硬件去定期生成,现在我们服务器用的就是这种,密码有效期就是3小时,插在服务器上的一个单片机USB设备提供密码,32位的大小写英文字母数字混合,然后把ubuntu server的任何修改密码的功能都策略性废掉了,你想恢复这些逃不过操作审计,都是一环扣一环的
    cherrot
        34
    cherrot  
       Jul 8, 2015
    私钥登录+oath动态token密码验证 噢哈哈
    About     Help     Advertise     Blog     API     FAQ     Solana     2711 Online   Highest 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 153ms UTC 11:07 PVG 19:07 LAX 04:07 JFK 07:07
    Do have faith in what you're doing.
    ubao msn 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