SSH 操作实践指南

2023-05-16

本文最先发布在:https://www.itcoder.tech/posts/ssh-practice/

SSH 是我们经常要和远程服务器交互使用的工具。

下面是一些实践中总结的 SSH 操作经验:

一、 如何选择 SSH key 的加密算法?

从安全性和性能上综合考虑,我们建议:

  1. 如果 ssh 支持ed25519,则使用 ed25519
  2. 否则,建议使用 rsa, 位数选择4096

二、 如何生成 SSH key?

通过ssh-keygen工具生成 SSH key。

根据上面的建议,我们推荐你选第一个命令。

如果不支持ed25519,则使用第二个命令。

ssh-keygen -t ed25519 -C "user@example.com"

ssh-keygen -t rsa -b 4096 -C "user@example.com"

ssh-keygen -t ecdsa -b 521  -C "user@example.com"

ssh-keygen -t dsa  -C "user@example.com"

关于密钥密码(passphrase):

  1. 如果想要便利操作,不设置密钥密码,直接跳过。
  2. 如果想要更安全,建议设置密钥密码。

三、如何在本地电脑免密码使用 SSH

在上面创建 SSH key 的时候,如果设置了密码。

那么,以后每次在电脑上使用 SSH 论证的时候,都会提示你输入秘钥密码,非常麻烦。

如果本地电脑安全的话,建议让电脑系统保存 SSH 秘钥密码,避免频繁输入密码。

~/.ssh目录下创建config文件,内容如下:

Host *
    UseKeychain yes
    AddKeysToAgent yes

四、拷贝 SSH 公钥到远程服务器

使用以下命令(ssh-copy-id)将 ssh 公钥 拷贝到远程服务器。

以后就可以通过 ssh 公钥密钥来认证登录远程服务器了。

 ssh-copy-id -i ~/.ssh/id_ed25519.pub root@127.0.0.1

 ssh-copy-id -i ~/.ssh/id_rsa.pub root@127.0.0.1

 ssh-copy-id -i ~/.ssh/id_ecdsa.pub root@127.0.0.1

 ssh-copy-id -i ~/.ssh/id_dsa.pub root@127.0.0.1

请根据 SSH key 加密算法类型,具体选择其中一条命令。 其中, root@127.0.0.1是远程服务器的公网 IP 地址和登录用户名,请根据实际情况修改。

这条命令的作用就是: 将本地 SSH 客户端的公钥,拷贝到远程服务器的~/.ssh/authorized_keys 文件中。

五、修改 SSH 的默认端口

SSH 的默认端口 22,很容易被攻击。

建议将该端口修改为0~65535的非常规端口,比如:3576

编辑 SSH 服务端配置文件:

Port 3576

保存退出。

如果服务器启用了 SELinux,则还需进行额外配置。

首先,确认 SELinux 是否启用:

sestatus 2> /dev/null | grep -E -q 'SELinux status:\s+enabled' && echo yes || echo no

输出 yes 即表示启用了 SELinux,那么就需要再对 SELinux 进行配置:

semanage port -a -t ssh_port_t -p tcp 3576

请注意把 3576 替换为实际配置的端口。

如果服务器启用了防火墙firewalld,则还需进行额外配置。

首先,确认 firewalld 是否启用:

systemctl status firewalld 

输出日志中含有Active: active (running)字样,那么还需要对firewalld进行配置:

firewall-cmd --permanent --zone=public --add-port=3576/tcp
firewall-cmd --reload

(后面对于 SSH 服务端配置文件的修改,最好也需要测试,并重启一下 sshd,保证修改生效。)

测试一下,设置是否正确:

sshd -t
WARNING: 'UsePAM no' is not supported in Fedora and may cause several problems.

根据提示修正错误和警告,直到测试通过。

重启 sshd 服务

systemctl restart sshd

六、启用 RSA验证,公钥验证

    RSAAuthentication yes   #是否允许RSA验证
    PubkeyAuthentication yes   #是否允许公钥验证
    AuthorizedKeysFile .ssh/authorized_keys  #公钥文件存放的位置

七、禁止密码安全验证

    ChallengeResponseAuthentication no   #设置是否允许使用提示应答式认证。sshd支持login.conf文件中定义的所有认证类型
    PasswordAuthentication no   #设置是否需要口令验证,默认为yes
    PermitEmptyPasswords no   #设置是否允许用空口令登录
    UsePAM yes   #是否启用PAM插件式认证模块,默认为yes 

注:在 RHEL 系列(RHEL,Fedora,CentOS 等)中不允许设置 UsePAM no,否则可能出现下面的警告和问题。

WARNING: 'UsePAM no' is not supported in Fedora and may cause several problems.

八、允许/禁止 Root 用户通过 SSH 登录系统

根据实际情况来设置是否允许 root 用户通过 SSH 登录系统。

    PermitRootLogin yes   #如果为yes则允许root用户使用ssh登录,为no则表示不允许root进行ssh登录,为without-password则表示禁止 root 账户通过密码登入,但仍可以通过公私钥对登入。

九、限制通过 SSH 方式的用户登录

9.1 只允许指定用户进行登录(白名单):

AllowUsers    aliyun test@192.168.1.1   # 允许 aliyun 和从 192.168.1.1 登录的 test 帐户通过 SSH 登录系统。

9.2 只拒绝指定用户进行登录(黑名单):

DenyUsers    d4rksec aliyun    #Linux系统账户   # 拒绝 d4rksec、aliyun 帐户通过 SSH 登录系统

 

十、 其他优化和安全配置

    LoginGraceTime 120   #设置如果用户不能成功登录,sshd将会在这个配置参数指定的时间过后断开连接(单位为秒)
    MaxAuthTries 6  #指定每个连接最大允许的认证次数。默认值是6.如果失败认证的次数超过这个数值的一半,连接将被强制断开。且会生成额外的失败日志消息。
    MaxSessions 10  #指定每个网络连接允许打开会话的最大数目。默认值为10
    StrictModes yes   #设置sshd在接受登录请求前是否检查用户的主目录以及rhosts文件的权限和所有者等信息。防止目录和文件设成任何人都有写权限

以上配置编辑SSHD 配置文件,/etc/ssh/sshd_config

十一、限制来自指定 IP 通过SSH 方式的用户登录

11.1 允许指定 IP 或者 IP 范围的用户进行登录(白名单):

编辑配置文件:

vi /etc/hosts.allow
sshd:192.168.0.1:allow  #允许 192.168.0.1 这个 IP 地址 ssh 登录
sshd:192.168.0.1/24:allow #允许 192.168.0.1/24 这段 IP 地址的用户登录
sshd:ALL # 允许全部的 ssh 登录 

11.2 禁止指定 IP 或者 IP 范围的用户进行登录(黑名单):

编辑配置文件:

vi /etc/hosts.deny
sshd:192.168.0.1:deny  #禁止 192.168.0.1 这个 IP 地址 ssh 登录
sshd:192.168.0.1/24:deny #禁止 192.168.0.1/24 这段 IP 地址的用户登录
sshd:ALL # 禁止全部的 ssh 登录 

注:同时设置上述两个文件时,hosts.allow文件中规则的优先级更高。

十二、 通过Fail2Ban 和 iptables 配置,防止服务器被恶意扫描

本文不展开,请阅读下面的参考文档,进一步了解相关内容。

十三、参考文档

  1. 選擇 SSH key 的加密演算法
  2. Linux 中提高的 SSH 的安全性
  3. SSH 安全加固的一些措施
  4. SSH 安全加固
  5. 安全运维那些事之SSH
  6. ssh安全加固
  7. SSH登陆失败的日志查看与攻击预防
  8. CentOS7下安装和使用Fail2ban
  9. Linux实例如何限制指定用户或IP地址通过SSH登录
  10. Top 20 OpenSSH Server Best Security Practices
  11. fail2ban的使用以及防暴力破解与邮件预警
  12. Fail2Ban 高级配置 保护 Nginx 服务



如果你有任何疑问,请通过以下方式联系我们:

微信:

微信群: 加上面的微信,备注微信群

QQ: 3217680847

QQ 群: 82695646雪梦科技交流群

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SSH 操作实践指南 的相关文章

  • Ansible bitbucket 克隆存储库配置 ssh 错误

    我之前发布过这个问题 但那里的答案不再有效 总之 当使用 Ansible 配置我的 vagrant box 时 在尝试使用 ssh 克隆我的 bitbucket 私有存储库时 我遇到了一个神秘的错误 该错误指出 权限被拒绝 公钥 然而 如果
  • 无法从 Sourcetree 拉取 Git 远程存储库

    我生成了 ssh 密钥并配置了我的 git 和 SourceTree 我可以 git pull 并从 Git bash 执行其他操作 注意 我在 bashrc 中添加了以下内容以使其正常工作 eval ssh agent ssh add 然
  • 如何用python脚本控制TP LINK路由器

    我想知道是否有一个工具可以让我连接到路由器并关闭它 然后从 python 脚本重新启动它 我知道如果我写 import os os system ssh l root 192 168 2 1 我可以通过 python 连接到我的路由器 但是
  • PHPStorm - 无效的后代文件名

    我正在尝试将 Windows 7 PC 上的本地 PHPStorm 项目与 Ubuntu 服务器同步 当我尝试任何类型的连接 例如 测试 SFTP 连接 时 它会失败并显示 Invalid descendent file name C np
  • ssh:连接到主机 bitbucket.org 端口 22:连接超时致命

    整个错误是 ssh connect to host bitbucket org port 22 Connection timed out fatal The remote end hung up unexpectedly 当我从位于不同服务
  • 使用 scp 从不同路径复制多个文件的智能方法[重复]

    这个问题在这里已经有答案了 我想知道一种简单的使用方法scp复制文件系统上不同路径中存在的文件和文件夹 SSH 目标服务器请求密码 但我无法将其放入配置文件中 我知道scp没有我可以从脚本提供的密码参数 所以现在我必须逐个复制每个文件或目录
  • Powershell Invoke-SSHCommand:使用“1”个参数调用“EndExecute”时出现异常

    我正在尝试通过 powershell 中的 Posh SSH 模块连接到 Netscaler SDX 服务器 以搜索特定文件 然后下载它 如果我用 putty 连接到服务器 它就可以工作 然后我可以输入 shell 来打开普通的 bash
  • 使用 JSch 分别为各个提示提供输入

    问题是 SSH 连接需要在常规登录后提供另一个用户 ID 和密码信息 我正在使用 JSch 连接到远程服务器 它接受以下形式的输入InputStream 和这个InputStream只能通过一次 由于会话是交互式的 这会导致问题 我尝试将输
  • 通过 SSH 的 sbt (Scala) 结果找不到命令,但如果我自己这样做就可以工作

    所以我正在尝试做一些涉及跑步的事情sbt通过 SSH 命令 这就是我正在尝试的 ssh my username
  • 如何通过 SSH 启动进程,使其保持运行?

    我有三个文件 Monitor sh 它启动 python 脚本 sudo python webCheck sudo python apiCheck 以及其他的 webCheck 和 apiCheck 它应该在我关闭终端后在后台运行 它无限循
  • 在 Windows 上为 Bitbucket 设置 SSH 密钥

    首先 我对 git repos 和命令行绝对是菜鸟 我在 Bitbucket 上有仓库 我基本上希望能够通过 gitbash 推送到存储库 而无需每次输入密码 我拥有的 Bitbucket 上的存储库已设置好代码 克隆存储库的本地目录 通过
  • RVM 无法通过 SSH 工作(作为一项功能)

    我刚刚在 Debian 6 服务器上安装了 RVM 一开始没有任何问题 但是 在一切设置完成后 我无法在终端中运行 RVM 我打字时收到的消息rvm use is RVM is not a function selecting rubies
  • 如何设置 Corkscrew 通过 Draconian 代理连接到 Github

    我的公司有一个严酷的代理服务器 它阻止我通过 SSH 删除服务器 从而阻止我使用 github 我花了最后一天的时间在网上查看示例 例如 如何通过严格的代理使用 GitHub https stackoverflow com question
  • 如何通过ssh获取远程命令的退出代码

    我正在通过 ssh 从远程计算机运行脚本 ssh some cmd my script 现在 我想在本地计算机上存储 shell 脚本的退出状态 我该怎么做 假设没有任何问题ssh其本身 其退出状态是在远程主机上执行的最后一个命令的退出状态
  • php run git 收到“ssh 权限被拒绝”

    我正在尝试从浏览器中运行 git pull php 脚本 但我得到了 sh 连接到主机 git assembla com 端口 22 权限被拒绝 我的 PHP 脚本
  • 为什么 cygwin 无法读取我的主目录中的 .ssh/config 文件?

    我正在使用 cygwin 并且正在尝试设置 ssh config 文件 Cygwin 的文件夹位于我的 C 驱动器中 我的主目录是 C Users USER 我注意到 当我编辑 C Users USER ssh config 时 cygwi
  • SSH IdentitiesOnly=yes 转发我的所有密钥

    我一生都无法弄清楚为什么我的 SSH 配置转发了错误的密钥 我有两把钥匙 我们会打电话给他们home rsa and work rsa 我做了以下事情 eval ssh agent ssh add K ssh home rsa ssh ad
  • gitlab 上的权限被拒绝(公钥)

    我的问题是我无法从 GitLab 推送或获取 不过 我可以克隆 通过 HTTP 或通过 SSH 当我尝试推送时出现此错误 权限被拒绝 公钥 致命 无法从远程存储库读取 从我看过的所有线程中 这是我所做的 在我的计算机上设置 SSH 密钥并将
  • ssh 连接超时

    我无法在 git 中 ssh 到 github bitbucket 或 gitlab 我通常会收到以下错误消息 如何避免它 输出 ssh T email protected cdn cgi l email protection i ssh
  • 如何使用受密码保护的私有 ssh 密钥连接 MySQL Workbench?

    我在使用受密码保护的密钥通过 SSH 连接工作台时遇到问题 我不知道必须将密码密钥放在工作台中的何处 它告诉我 无 拒绝访问 可以继续的身份验证 公钥 我的凭据正确 我可以使用同一用户通过终端 SSH 连接 所以这让我认为这是因为我的 ss

随机推荐

  • ubuntu下conda虚拟环境的操作,cuda,cudnn版本的查询, pytorch的安装

    一 ubuntu下conda虚拟环境的操作 随着深度学习的发展 xff0c tensorflow keras pytorch等深度学习框架的兴起和发展 xff0c 或者多用户的使用情况 xff0c 使得在ubuntu下我们可能需要安装多个深
  • dos 设置环境变量

    1 查看环境变量 echo path 2 设置环境变量 set path 61 path C your path
  • H264--2--语法及结构

    名词解释 场和帧 xff1a 视频的一场或一帧可用来产生一个编码图像 在电视中 xff0c 为减少大面积闪烁现象 xff0c 把一帧分成两个隔行的场 片 xff1a 每个图象中 xff0c 若干宏块被排列成片的形式 片分为I片 B片 P片和
  • 强化练习6:判断一字符串是否为回文,是返回1,不是返回0,出错返回-1

    题目 xff1a 判断一字符串是否为回文 xff0c 是返回1 xff0c 不是返回0 xff0c 出错返回 1 程序如下 xff1a include lt stdio h gt int fun char p if p 61 61 NULL
  • debian 服务器安装图形界面

    本人由于习惯了Ubuntu的图形界面 xff0c 实际上 呢 xff0c 是被Windows给带坏了 虽然全 控制台 很流弊 xff0c 但看着还是很不舒服 xff0c 所以就想着 安装 一个图形界面 其实很简单的说 xff0c 就是几行命
  • 如何在Ubuntu 20.04 上安装 Xrdp 服务器(远程桌面)

    本文最先发布在 xff1a https www itcoder tech posts how to install xrdp on ubuntu 20 04 Xrdp 是一个微软远程桌面协议 xff08 RDP xff09 的开源实现 xf
  • 分布式事务最经典的七种解决方案

    随着业务的快速发展 业务复杂度越来越高 xff0c 几乎每个公司的系统都会从单体走向分布式 xff0c 特别是转向微服务架构 随之而来就必然遇到分布式事务这个难题 xff0c 这篇文章总结了分布式事务最经典的解决方案 xff0c 分享给大家
  • 如何在 Ubuntu 20.04 上安装 Ruby

    本文最先发布在 xff1a https www itcoder tech posts how to install ruby on ubuntu 20 04 Ruby 是当今最流行的语言之一 它有简洁的语法 xff0c 并且注重简单和生产力
  • 如何在 Ubuntu 20.04 上安装 Tomcat 9

    本文最先发布在 xff1a https www itcoder tech posts how to install tomcat 9 on ubuntu 20 04 这篇指南描述如何在 Ubuntu 20 04 上安装和配置 Tomcat
  • 如何在 Ubuntu 20.04 上安装 Yarn

    本文最先发布在 xff1a https www itcoder tech posts how to install yarn on ubuntu 20 04 Yarn 是一个 JavaScript 包管理器 xff0c 它兼容于 npm x
  • 如何在 Ubuntu 20.04 上安装和使用 Docker Compose

    本文最先发布在 xff1a https www itcoder tech posts how to install and use docker compose on ubuntu 20 04 Docker Compose 是一个命令行工具
  • 如何在 Ubuntu 20.04 上安装 VirtualBox

    本文最先发布在 xff1a https www itcoder tech posts how to install virtualbox on ubuntu 20 04 VirtualBox 是一个开源的 xff0c 跨平台的虚拟化软件 x
  • 如何在 Ubuntu 20.04 启用 SSH

    本文最先发布在 xff1a https www itcoder tech posts how to enable ssh on ubuntu 20 04 Secure Shell SSH 是一个网络协议 xff0c 它主要被用来加密客户端和
  • 如何在 Ubuntu 20.04 上安装 Vagrant

    本文最先发布在 xff1a https www itcoder tech posts how to install vagrant on ubuntu 20 04 Vagrant是一个命令行工具 xff0c 用于构建和管理虚拟开发环境 默认
  • 如何在 Ubuntu 20.04 上安装 GCC(build-essential)

    本文最先发布在 xff1a https www itcoder tech posts how to install gcc on ubuntu 20 04 GNU 编译器集合是一系列用于语言开发的编译器和库的集合 xff0c 包括 C C
  • 如何在 Ubuntu 20.04 上安装和配置 Redis

    本文最先发布在 xff1a https www itcoder tech posts how to install and configure redis on ubuntu 20 04 Redis 是一个开源的在内存存储键值对数据的存储程
  • 如何在 Ubuntu 20.04 上安装 PHP

    本文最先发布在 xff1a https www itcoder tech posts how to install php on ubuntu 20 04 PHP 是世界上使用广泛的服务端编程语言之一 很多著名的 CMS 和框架 xff0c
  • 用python轻松完成一个分布式事务TCC,保姆级教程

    什么是分布式事务 xff1f 银行跨行转账业务是一个典型分布式事务场景 xff0c 假设A需要跨行转账给B xff0c 那么就涉及两个银行的数据 xff0c 无法通过一个数据库的本地事务保证转账的ACID xff0c 只能够通过分布式事务来
  • 如何在 Ubuntu 20.04 上安装 Spotify

    本文最先发布在 xff1a https www itcoder tech posts how to install spotify on ubuntu 20 04 Spotify是一个音乐流媒体服务商 xff0c 它可以让你和无数的歌曲亲密
  • SSH 操作实践指南

    本文最先发布在 xff1a https www itcoder tech posts ssh practice SSH 是我们经常要和远程服务器交互使用的工具 下面是一些实践中总结的 SSH 操作经验 xff1a 一 如何选择 SSH ke