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

Linux 0 基础,在 VPS 上禁止 ROOT 账户,禁用密码登录,新建普通账户 A 并通过 SSH-Key 登陆 A 的方法 (欢迎指正:) OS: OS X 10.10.5

  •  
  •   fulajickhz · 2016-04-12 21:00:53 +08:00 · 4154 次点击
    这是一个创建于 2936 天前的主题,其中的信息可能已经有所发展或是发生改变。

    目的: 禁用 ROOT 登陆,禁用密码登录,使用 SSH-Key 登陆普通账户 A 。 OS: OS X 10.10.5

    1 、本地利用 terminal_1 ,通过 SSH 登陆 Vultr 的 ROOT 账户

    ssh root@ip_address
    #以下操作皆在账户 ROOT 中进行,当禁用 ROOT ,重启 SSH 后,只能用普通账户 A ,
    #通过 SSH-Key 登录,密码 123456 ,最后要检验是否真的禁止 ROOT 登陆了
    
    The authenticity of host 'example.com (xxx.xxx.xxx.xxx)' can't be established.
    RSA key fingerprint is f9:9b:06:11:75:d4:1f:d1:3c:51:0d:22:4a:13:ff:9f.
    Are you sure you want to continue connecting (yes/no)  _
    
    [email protected]'s password: _
    

    2 、添加普通账户 A ,并设置 sudo 权限

    adduser   A 
    #添加用户 A ,输密码 1234566 ,最后要禁用密码登录,允许 SSH-Key 登陆,检验是否成功禁止密码登录。
    
    echo -e "\nA ALL=(ALL) ALL\n" >> /etc/sudoers #设置 sudo 权限
    tail -3 /etc/sudoers
    
    A  ALL=(ALL) ALL
    
    

    command+D 退出 ROOT 账户,用密码登陆 A

    暂停 terminal_1 操作

    3 、开启 terminal_2 ,在本地生成 SSH-Key 密钥,并设置权限

    ssh-keygen -t rsa 
    #创建密钥 
    
    Generating public/private rsa key pair. 
    
    Enter file in which to save the key (/user/.ssh/id_rsa): 
    #回车,路径默认为括号中的内容
    
    Created directory '/user/.ssh ' 
    
    Enter passphrase (empty for no passphrase): 
    #输入许可调用私钥的密码
    
    Enter same passphrase again: 
    #确认密码
    
    Your identification has been saved in /user/.ssh /id_rsa. #私钥 地址
    Your public key has been saved in /user/.ssh /id_rsa.pub. #公钥 地址
    The key fingerprint is: 
    05:71:53:92:96:ba:53:20:55:15:7e:5d:59:85:32:e4 root@test 
    The key's randomart image is: 
    +--[ RSA 2048]----+ 
    | o o ..          | 
    | . o oo.+ .      |
    | o.+... =        |
    | ...o            |
    | o S             | 
    | .               |  
    |                 |
    |                 |
    +-----------------+ 
    
    chmod 700 ~/.ssh
    chmod 600 /user/.ssh /id_rsa #对私钥赋予 600 的权限,直接拖拽文件到 terminal_2 会显示路径
    

    4 、上传公钥到 Vultr

    ssh-copy-id -i /user/.ssh /id_rsa.pub  A@IP_address 
    #把公钥 /user/.ssh /id_rsa.pub
    #上传到账户 A 中的 /home/A/.ssh/authorized_keys
    
    The authenticity of host '12.34.56.78 (12.34.56.78)' can't be established. 
    RSA key fingerprint is b1:2d:33:67:ce:35:4d:5f:f3:a8:cd:c0:c4:48:86:12. 
    Are you sure you want to continue connecting (yes/no)? yes 
    Warning: Permanently added '12.34.56.78' (RSA) to the list of known hosts. [email protected]'s password:  Now try logging into the machine, with "ssh '[email protected]'", and check in:  
    ~/.ssh/authorized_keys  to make sure we haven't added extra keys that you weren't expecting.
    

    暂停 terminal_2 的操作,转到 terminal_1

    5 、设置公钥权限

    chmod 400 /home/A/.ssh/authorized_keys
    #将 authorized_keys 的权限设置为对拥有者只读,其他用户没有任何权限
    
    chattr +i /home/A/.ssh/authorized_keys
    #保证 authorized_keys 的权限不会被改掉
    
    chattr +i /home/A/.ssh
    #设置 ~./ssh 的 immutable 位权限,
    #防止重命名 ~/.ssh ,然后新建新的 ~/.ssh 目录和 authorized_keys 文件
    

    6 、按 command+D 退出 A 账户,尝试用 SSH-Key 登陆 A

    ssh -i  /user/.ssh /id_rsa  A@IP_address  
    #利用 SSH-Key 登陆普通账户 A ,看是否成功
    

    7 、如果成功登陆 A, 编辑 config 文件

    vim /etc/ssh/sshd_config #按 i 进入编辑
    
    确保(去掉注释#)
    RSAAuthentication      yes  #允许 RSA 认证
    PubkeyAuthentication   yes  #允许公钥认证
    PermitRootLogin        no  #禁止 ROOT 登陆
    PasswordAuthentication  no  #禁止密码登陆
    修改端口, 将 #Port 22 改为  Port 端口号数字 #改掉默认端口
    按 esc 退出编辑,:wq  #保存并退出 sshd_config
    
    service sshd restart #重启 SSH
    

    8 、在本机设置 config 文件方便 SSH-Key 登陆,转到 terminal_2

    vi ~/.ssh/config  #在私钥所在的.ssh 文件夹内新建一个 config 文件
    
    按 i 编辑,复制以下内容
    Host vps                      #这个名字随意,感觉像调用函数
    HostName IP_address           #IP 地址或服务器域名 
    Port XX                       #服务器端开放的 ssh 端口,第 7 步中改的端口
    User A                        #登录的用户名 
    IdentityFile ~/.ssh/ id_rsa   #使用的密钥文件密钥文件,本地私钥地址
    
    按 esc 退出编辑,输入:wq 退出并保存
    

    就可以用 ssh vps ,登陆 vps 的 A 账户了

    #rm ~/ 加路径就是移除文件
    # mkdir  创建文件夹
    # vi   打开或创建新文件
    # ~表示当前用户的根目录
    
    10 条回复    2016-04-12 23:15:20 +08:00
    fulajickhz
        1
    fulajickhz  
    OP
       2016-04-12 21:02:50 +08:00
    前文 1 2

    打算使用 Vultr Tokyo, 浙江联通,正在搜集资料 希望大家能给点建议 谢谢

    https://v2ex.com/t/267483#;

    打算使用 Vultr 搭建 SS , aria2 ,一些疑问向大家请教

    https://v2ex.com/t/270028#reply17

    ---
    @realpg 大兄弟有空帮忙看看 谢谢
    realpg
        2
    realpg  
       2016-04-12 21:11:37 +08:00
    @fulajickhz
    安全策略这方面,我倒是不爱用 key 登陆,一直用户名密码。
    只要强度别太变态的弱,修改 ssh 端口,不滥用捆绑木马的山寨客户端,这都不是问题。
    因为我的跨墙专用 VPS 都是没有其他功能的,就是一个 linode 日本的纯过墙服务器,所以安全不算啥问题,最不济服务器整体崩溃,用配好的配置文件快速恢复一下三五分钟的事儿。
    fulajickhz
        3
    fulajickhz  
    OP
       2016-04-12 21:20:40 +08:00
    @realpg 感谢回复,不过我是 Linux 0 基础,所以还是弄安全点好,不怕一万就怕万一。
    billlee
        4
    billlee  
       2016-04-12 21:23:10 +08:00
    你这个叫做禁止 root 通过 ssh 登录,而不是禁止 root 登录。
    fulajickhz
        5
    fulajickhz  
    OP
       2016-04-12 21:34:37 +08:00
    @billlee 感谢指正,请问禁止 root 通过 ssh 登录这整个流程有问题吗?
    TakanashiAzusa
        6
    TakanashiAzusa  
       2016-04-12 21:36:58 +08:00 via Android
    一个问题连发三贴。。。为什么不在一个帖子里 append 呢
    fulajickhz
        7
    fulajickhz  
    OP
       2016-04-12 21:40:54 +08:00
    @TakanashiAzusa 我怕大家太长不看....
    Kilerd
        8
    Kilerd  
       2016-04-12 22:11:39 +08:00
    换 ssh 端口, root 密码强度高, fail2ban 基本就没什么事了。
    Cloudee
        9
    Cloudee  
       2016-04-12 22:20:01 +08:00
    `passwd -l root`才是禁止 root 登录…… su 都 su 不过去,只能 sudo su
    billlee
        10
    billlee  
       2016-04-12 23:15:20 +08:00
    @Cloudee 然而 -l 是禁用密码,仍然可以用其它凭据认证,比如说 ssh key.
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2770 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 03:44 · PVG 11:44 · LAX 20:44 · JFK 23:44
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.