• Linux安装与配置SSH服务


    一、SSH服务安装

    1. 安装ssh服务

    如果你用的是redhat,fedora,centos等系列linux发行版,那么敲入以下命令:

    1. sudo yum install sshd
    2. sudo yum install openssh-server

    如果你使用的是debian,ubuntu,linux mint等系列的linux发行版,那么敲入以下命令:

    1. sudo apt-get install sshd
    2. sudo apt-get install openssh-server

    2. 启动ssh服务

    1. service sshd start
    2. or
    3. /bin/systemctl restart sshd.service
    4. or
    5. /etc/init.d/sshd start
    6. or
    7. sudo systemctl restart sshd

    设置开机运行

    chkconfig sshd on

    查看ssh服务的状态

    sudo service sshd status

    如果出现
    Loaded: error (Reason: No such file or directory)
    提示的话,说名没有安装ssh服务,按照第一步:安装ssh服务。

    如果出现
    Active: inactive (dead)
    说明已经安装了ssh服务,但是没有开启。按照第二步:开启ssh服务。

    如果出现
    Active: active (running) since XXX
    说明已经成功了

    二、SSH服务卸载

    如果你用的是redhat,fedora,centos等系列linux发行版,那么敲入以下命令:

    yum remove sshd

    如果你使用的是debian,ubuntu,linux mint等系列的linux发行版,那么敲入以下命令:

    sudo apt-get –purge remove sshd1234

    三、SSH服务配置

    ssh客户端配置文件:

    /etc/ssh/ssh_config

    ssh服务端配置文件:

    /etc/ssh/sshd_config

    服务器端常用配置选项:

    1. Port 22 #端口
    2. ListenAddress #监听的IP
    3. Protocol 2 #SSH版本选择
    4. HostKey /etc/ssh/ssh_host_rsa__key #私钥保存位置
    5. ServerKeyBits #1024
    6. ServerFacility AUTH #日志记录ssh登陆情况
    7. #KeyRegenerationInterval 1h #重新生成服务器密钥的周期
    8. #ServerKeyBits 1024 #服务器密钥的长度
    9. LogLevel INFO #记录sshd日志消息的级别
    10. #PermitRootLogin yes #是否允许root远程ssh登录
    11. #RSAAuthentication yes #设置是否开启ras密钥登录方式
    12. #PubkeyAuthentication yes #设置是否开启公钥验登录方式
    13. #AuthorizedKeysFile .ssh/authorized_keys #设置公钥验证文件的路径
    14. #PermitEmptyPasswords no #设置是否允许空密码的账号登录
    15. X11Forwarding yes #设置是否允许X11转发
    16. GSSAPIAuthentication yes #GSSAPI认证开启

    1. 默认端口修改

    注意:ssh默认端口号,建议修改为其他非常用端口。

    1. #Port 22 #这行加#号注释掉
    2. Port 2222 #下面添加这一行

    2. 监听IP地址

    监听的IP,允许某些特定的IP才可以ssh登陆进来,0.0.0.0表示监听所有ipv4的22端口。

    ListenAddress

    3. 采用SSH协议版本

    默认的ssh版本,建议采用第二代版本。

    Protocol 2

    4. 私钥配置

    版本v2的私钥保存路径。

    1. HostKey /etc/ssh/ssh_host_rsa__key
    2. # HostKeys for protocol version 2
    3. HostKey /etc/ssh/ssh_host_rsa_key
    4. #HostKey /etc/ssh/ssh_host_dsa_key

    5. 加密位

    钥匙串的加密位数,默认采用1024位加密。

    ServerKeyBits 1024

    6. 日志等级

    需要记录日志,并设定日志等级为INFO,建议不用修改。

    ServerFacility AUTH & LogLevel INFO

    7. GGSSAP认证

    GGSSAP认证默认已开启,经过dns进行认证,尝试将主机IP和域名进行解析。若管理主机无对外域名,建议在管理主机上在客户端的配置文件将此认证关闭。

    GGSSAPIAuthentication yes

    服务器端安全配置选项:

    1. PermitRootLogin yes #允许root的ssh登陆
    2. PubkeyAuthentication yes #是否使用公钥验证
    3. AuthorizeKeysFile .ssh/authorized_keys #公钥的保存位置
    4. PasswordAuthentication yes #允许使用密码验证登陆
    5. PermitEmptyPasswords no #不允许空密码登陆

    注意:如果开启公钥验证,可以关闭允许root登陆、关闭允许使用密码验证登陆,此时将采用公钥验证登陆,无需输入密码。建议采用此更安全的方式,直接使用私钥和公钥匹配的公钥验证方式。

    ​ssh指纹和knownhosts文件

    服务器端有3对非对称加密秘钥,当客户端连接服务端时,将ssh公钥发给客户端,要传输的数据经过公钥加密再进行传输,保证数据传输安全。

    为了防止ssh服务器伪造,通过私钥计算出ssh指纹,ssh指纹匹配才能证明是要登录的服务器。


    当输入yes后,会在ssh客户端的家目录下多一个ssh服务器公钥文件。

    跳过指纹检查,客户端直接接受服务器的公钥:

     配置ssh免密码登录

    1. 添加文件

    1. vi /root/.ssh/authorized_keys //创建文件authorized_keys
    2. authorized_keys 存放公钥,远程使用私钥登陆
    3. chmod 600 /root/.ssh/authorized_keys //加权限
    4. chmod 700 /root/.ssh/ //加权限

    2. 添加公钥到文件内(id_rsa.pub)

    1. 这里是在本地客户端生成非对称加密秘钥
    2. ssh-keygen -t rsa
    3. 密钥名称和密码可以不填 默认即可,密码默认空

    将客户端公钥/root/.ssh/id_rsa.pub传到ssh服务器的/root/.ssh/authorized_keys。

    vi /root/.ssh/authorized_keys

    3. 编辑ssh配置文件:

    1. vi /etc/ssh/sshd_config //编辑ssh配置文件
    2. PermitRootLogin yes // 禁止root远程登录,可选项
    3. PasswordAuthentication yes //使用基于口令认证的方式登陆,默认yes,可选项
    4. //新增以下3个配置
    5. PubkeyAuthentication yes //允许使用基于密钥认证的方式登陆,必选项
    6. RSAAuthentication yes // 启用 RSA 认证 ,可选项
    7. AuthorizedKeysFile .ssh/authorized_keys // 公钥文件路径,可选项

    4. 重启sshd服务

    service sshd restart

    5. 在电脑终端输入

    ssh root@47.96.118.128

    免密登录常见错误:

    1. IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
    2. Someone could be eavesdropping on you right now (man-in-the-middle attack)!
    3. It is also possible that a host key has just been changed.
    4. The fingerprint for the ECDSA key sent by the remote host is
    5. SHA256:sbd8mG3CPJc81mLgPPwLwVy7LF8qvUUuXisbcPKzTyE.
    6. Please contact your system administrator.
    7. Add correct host key in /Users/admin/.ssh/known_hosts to get rid of this message.
    8. Offending ECDSA key in /Users/admin/.ssh/known_hosts:12
    9. ECDSA host key for 47.96.118.128 has changed and you have requested strict checking.
    10. Host key verification failed.

    解决办法输入:

    rm -rf ~/.ssh/known_hosts

    然后重新连接即可。

    客户端可以通过ssh-copy-id把自己公钥传递给服务器的某个用户家目录下,就可以免密登录该用户。

    提升ssh响应速度

    减少ssh的连接时间,提升ssh响应速度。

    ssh -o ConnectTimeout=3 192.168.0.10
    
    1. vim /etc/ssh/sshd_config
    2. UseDNS no

    配置ssh超时时间

    用SSH登录到Linux的时候,由于默认的连接超时时间很短,经常需要断了后再连接,比较麻烦。可以通过设置linux  ssh配置解决。

    ClientAliveInterval  每隔多少秒给SSH客户端发送一次信号;
    ClientAliveCountMax  超时重连的次数;

    1. vim /etc/ssh/sshd_config
    2. #没有的话在末尾添加
    3. ClientAliveInterval 60
    4. ClientAliveCountMax 10

    意思是60秒检查一次客户端响应,最多检查10次。如果10次都检查到客户端不响应,那么就认为ssh已经断开了。

    修改自己 root 目录下的/root/.bash_profile文件,加上:

    export TMOUT=1000000 #以秒为单位

    然后运行:

    source .bash_profile

    每一分钟,sshd都和ssh client打个招呼,检测它是否存在,不存时即断开连接。

    注意:设置完成后,要退出ssh远程连接,再次登录后才可以生效。因为要再读取一次 ./bash_profile。

    为了方便,将设置写成了如下脚本:

    1. echo export TMOUT=1000000 >> /root/.bash_profile
    2. cat /root/.bash_profile
    3. source .bash_profile
    4. cp /etc/ssh/sshd_config /etc/ssh/sshd_config_bak
    5. echo ClientAliveInterval=60 >> /etc/ssh/sshd_config
    6. service sshd restart
    7. cat /etc/ssh/sshd_config
    8. service sshd restart
    9. exit

    注意:在ClientAliveInterval(/etc/ssh/sshd_config)、环境变量TMOUT(在/etc/profile或.bash_profile中设置)以及putty的"Seconds between keepalives“这些方法中,经检测,只有TMOUT可以控制ssh连接在空闲时间超时,自动断开连接的时间,数字单位为“秒”。

    在设置了TMOUT后(非0),另外两个变量则不起作用的。

    另外,特别提醒的是,设置好ssh的登录超时时间以后,记得退出重新登录或重启系统,以使配置生效。

    SSH其他管理

    1. [root@imxhy]# yum -y install policycoreutils-python
    2. [root@imxhy]# semanage port -a -t ssh_port_t -p tcp 2222
    3. [root@imxhy]# semanage port -l | grep ssh #查看SELinux设置
    4. [root@imxhy]# firewall-cmd --permanent --add-port=2222/tcp
    5. [root@imxhy]# systemctl restart firewalld.service
    6. [root@imxhy]# systemctl restart sshd.service
  • 相关阅读:
    TFTP协议解析及C/C++代码实现
    使用FabricJS创建Image对象的JSON表示
    安卓日志输出-logger
    Python第三章 程序控制结构
    前端工程化精讲第十九课 安装提效:部署流程中的依赖安装效率优化
    编译原理复习——文法和语言
    Linux权限基础知识
    C语言实现将一个数组逆序输出,使用指针数组操作
    解决“您在 /var/spool/mail/root 中有新邮件”问题
    《逆向工程核心原理》学习笔记(五):64位 & Windows 内核6
  • 原文地址:https://blog.csdn.net/qq_35029061/article/details/125843690