1、修改vi /etc/ssh/sshd_config 文件

下为本文中需要做的修改:

Port 7879        SSH默认端口,可随意修改
Protocol 2       SSH使用协议,无需修改,默认即可

RSAAuthentication yes         开启RSA加密方式
PubkeyAuthentication yes      开启公钥认证
AuthorizedKeysFile .ssh/authorized_keys      公钥存放位置


PasswordAuthentication no     拒绝使用密码登录

GSSAPIAuthentication no       防止登录慢,以及报错问题(具体本人也不知。。。)

ClientAliveInterval 300                      300秒超时自动退出
ClientAliveCountMax 10                   允许SSH远程连接的最大数

服务器端生成私匙和公钥

[root@localhost ~]# ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
e6:eb:d7:7b:9c:e3:fc:c8:95:0a:22:83:2f:9c:1d:ee root@localhost


[root@localhost .ssh]# cat id_rsa.pub > authorized_keys

[root@localhost .ssh]# chmod 600 authorized_keys

[root@localhost .ssh]# rm -f id_rsa.pub


配置Linux客户端

将公钥拷到客户端,使服务器能通过密钥密码登录客户端

[root@localhost .ssh]# scp -P 94 authorized_keys root@192.168.100.2:/root/
Enter passphrase for key '/root/.ssh/id_rsa':
root@192.168.100.2's password:
authorized_keys                                                           100%  396     0.4KB/s   00:00  

移动客户端authorized_keys公钥文件至.ssh目录中

mv  authorized_keys   /root/.ssh/

配置xshell登录服务端

将服务端的 id_rsa 私钥文件拷到windows主机中,然后用xshell的认证功能导入id_rsa文件

ssh 配置以及公私钥认证_ssh密钥认证

此时已经完成配置!







下为sshd_config 文件详解:


  1. # 1. 关于 SSH Server 的整体设定,包含使用的 port 啦,以及使用的密码演算方式

  2. Port 22          # SSH 预设使用 22 这个 port,您也可以使用其他 port !

  3. Protocol 2,1        # 选择的 SSH 协议版本,可以是 1 也可以是 2 ,
                  # 如果要同时支持两者,就必须要使用 2,1 这个分隔了!

  4. #ListenAddress 0.0.0.0   # 监听的主机适配卡!举个例子来说,如果您有两个 IP,
                  # 分别是 192.168.0.100 及 192.168.2.20 ,那么只想要
                  # 开放 192.168.0.100 时,就可以写如同下面的样式:
    ListenAddress 192.168.0.100          # 只监听来自 192.168.0.100 这个 IP 的SSH联机。
                       # 如果不使用设定的话,则预设所有接口均接受 SSH

  5. PidFile /var/run/sshd.pid      # 可以放置 SSHD 这个 PID 的档案!左列为默认值

  6. LoginGraceTime 600     # 当使用者连上 SSH server 之后,会出现输入密码的画面,

  7.               # 在该画面中,在多久时间内没有成功连上 SSH server ,

  8.               # 就断线!时间为秒!

  9. Compression yes      # 是否可以使用压缩指令?当然可以?!


  10. # 2. 说明主机的 Private Key 放置的档案,预设使用下面的档案即可!

  11. HostKey /etc/ssh/ssh_host_key    # SSH version 1 使用的私钥

  12. HostKey /etc/ssh/ssh_host_rsa_key  # SSH version 2 使用的 RSA 私钥

  13. HostKey /etc/ssh/ssh_host_dsa_key  # SSH version 2 使用的 DSA 私钥


  14. # 2.1 关于 version 1 的一些设定!

  15. KeyRegenerationInterval 3600     # 由前面联机的说明可以知道, version 1 会使用

  16.                    # server 的 Public Key ,那么如果这个 Public

  17.                    # Key 被偷的话,岂不完蛋?所以需要每隔一段时间

  18.                    # 来重新建立一次!这里的时间为秒!

  19. ServerKeyBits 768           # 没错!这个就是 Server key 的长度!

  20. # 3. 关于登录文件的讯息数据放置与 daemon 的名称!

  21. SyslogFacility AUTH         # 当有人使用 SSH 登入系统的时候,SSH会记录资

  22.                    # 讯,这个信息要记录在什么 daemon name 底下?

  23.                    # 预设是以 AUTH 来设定的,即是 /var/log/secure

  24.                    # 里面!什么?忘记了!回到 Linux 基础去翻一下

  25.                    # 其它可用的 daemon name 为:DAEMON,USER,AUTH,

  26.                    # LOCAL0,LOCAL1,LOCAL2,LOCAL3,LOCAL4,LOCAL5,

  27. LogLevel INFO            # 登录记录的等级!嘿嘿!任何讯息!

  28.                    # 同样的,忘记了就回去参考!

  29. # 4. 安全设定项目!极重要!

  30. # 4.1 登入设定部分

  31. PermitRootLogin no     # 是否允许 root 登入!预设是允许的,但是建议设定成 no!

  32. UserLogin no        # 在 SSH 底下本来就不接受 login 这个程序的登入!

  33. StrictModes yes      # 当使用者的 host key 改变之后,Server 就不接受联机,

  34.               # 可以抵挡部分的木马程序!

  35. #RSAAuthentication yes   # 是否使用纯的 RSA 认证!?仅针对 version 1 !

  36. PubkeyAuthentication yes  # 是否允许 Public Key ?当然允许啦!只有 version 2

  37. AuthorizedKeysFile      .ssh/authorized_keys

  38.               # 上面这个在设定若要使用不需要密码登入的账号时,那么那个

  39.               # 账号的存放档案所在档名!

  40. # 4.2 认证部分

  41. RhostsAuthentication no  # 本机系统不止使用 .rhosts ,因为仅使用 .rhosts 太

  42.               # 不安全了,所以这里一定要设定为 no !

  43. IgnoreRhosts yes      # 是否取消使用 ~/.ssh/.rhosts 来做为认证!当然是!

  44. RhostsRSAAuthentication no # 这个选项是专门给 version 1 用的,使用 rhosts 档案在

  45.               # /etc/hosts.equiv配合 RSA 演算方式来进行认证!不要使用

  46. HostbasedAuthentication no # 这个项目与上面的项目类似,不过是给 version 2 使用的!

  47. IgnoreUserKnownHosts no  # 是否忽略家目录内的 ~/.ssh/known_hosts 这个档案所记录

  48.               # 的主机内容?当然不要忽略,所以这里就是 no 啦!

  49. PasswordAuthentication yes # 密码验证当然是需要的!所以这里写 yes ?!

  50. PermitEmptyPasswords no  # 若上面那一项如果设定为 yes 的话,这一项就最好设定

  51.               # 为 no ,这个项目在是否允许以空的密码登入!当然不许!

  52. ChallengeResponseAuthentication yes  # 挑战任何的密码认证!所以,任何 login.conf

  53.                    # 规定的认证方式,均可适用!

  54. #PAMAuthenticationViaKbdInt yes      # 是否启用其它的 PAM 模块!启用这个模块将会

  55.                    # 导致 PasswordAuthentication 设定失效!


  56. # 4.3 与 Kerberos 有关的参数设定!因为我们没有 Kerberos 主机,所以底下不用设定!

  57. #KerberosAuthentication no

  58. #KerberosOrLocalPasswd yes

  59. #KerberosTicketCleanup yes

  60. #KerberosTgtPassing no


  61. # 4.4 底下是有关在 X-Window 底下使用的相关设定!

  62. X11Forwarding yes

  63. #X11DisplayOffset 10

  64. #X11UseLocalhost yes

  65. # 4.5 登入后的项目:

  66. PrintMotd no              # 登入后是否显示出一些信息呢?例如上次登入的时间、地点等

  67.              # 等,预设是 yes ,但是,如果为了安全,可以考虑改为 no !

  68. PrintLastLog yes     # 显示上次登入的信息!可以啊!预设也是 yes !

  69. KeepAlive yes       # 一般而言,如果设定这项目的话,那么 SSH Server 会传送

  70.              # KeepAlive 的讯息给 Client 端,以确保两者的联机正常!

  71.              # 在这个情况下,任何一端死掉后, SSH 可以立刻知道!而不会

  72.              # 有僵尸程序的发生!

  73. UsePrivilegeSeparation yes # 使用者的权限设定项目!就设定为 yes 吧!

  74. MaxStartups 10      # 同时允许几个尚未登入的联机画面?当我们连上 SSH ,

  75.              # 但是尚未输入密码时,这个时候就是我们所谓的联机画面啦!

  76.              # 在这个联机画面中,为了保护主机,所以需要设定最大值,

  77.              # 预设最多十个联机画面,而已经建立联机的不计算在这十个当中

  78. # 4.6 关于使用者抵挡的设定项目:

  79. DenyUsers *        # 设定受抵挡的使用者名称,如果是全部的使用者,那就是全部

  80.              # 挡吧!若是部分使用者,可以将该账号填入!例如下列!

  81. DenyUsers test

  82. DenyGroups test      # 与 DenyUsers 相同!仅抵挡几个群组而已!

  83. # 5. 关于 SFTP 服务的设定项目!

  84. Subsystem       sftp    /usr/lib/ssh/sftp-server


ssh-keygen 中文手册

SSH-KEYGEN(1)              OpenBSD Reference Manual              SSH-KEYGEN(1)

名称ssh-keygen - 生成、管理和转换认证密钥


语法ssh-keygen [-q] [-bbits] -ttype [-Nnew_passphrase] [-Ccomment] [-foutput_keyfile]
     ssh-keygen -p [-P old_passphrase] [-N new_passphrase] [-f keyfile]
     ssh-keygen -i [-f input_keyfile]
     ssh-keygen -e [-f input_keyfile]
     ssh-keygen -y [-f input_keyfile]
     ssh-keygen -c [-P passphrase] [-C comment] [-f keyfile]
     ssh-keygen -l [-f input_keyfile]
     ssh-keygen -B [-f input_keyfile]
     ssh-keygen -Dreaderssh-keygen -Fhostname [-f known_hosts_file]
     ssh-keygen -H [-f known_hosts_file]
     ssh-keygen -Rhostname [-f known_hosts_file]
     ssh-keygen -Ureader [-f input_keyfile]
     ssh-keygen -rhostname [-f input_keyfile] [-g]
     ssh-keygen -Goutput_file [-v] [-b bits] [-M memory] [-S start_point]
     ssh-keygen -Toutput_file -f input_file [-v] [-a num_trials] [-W generator]


描述ssh-keygen 用于为 ssh(1)生成、管理和转换认证密钥,包括 RSA 和 DSA 两种密钥。
     密钥类型可以用 -t 选项指定。如果没有指定则默认生成用于SSH-2的RSA密钥。

     ssh-keygen 还可以用来产生 Diffie-Hellman group exchange (DH-GEX) 中使用的素数模数。
     参见模数生成小节。

     一般说来,如果用户希望使用RSA或DSA认证,那么至少应该运行一次这个程序,
     在 ~/.ssh/identity, ~/.ssh/id_dsa~/.ssh/id_rsa 文件中创建认证所需的密钥。
     另外,系统管理员还可以用它产生主机密钥。

     通常,这个程序产生一个密钥对,并要求指定一个文件存放私钥,同时将公钥存放在附加了".pub"后缀的同名文件中。
     程序同时要求输入一个密语字符串(passphrase),空表示没有密语(主机密钥的密语必须为空)。
     密语和口令(password)非常相似,但是密语可以是一句话,里面有单词、标点符号、数字、空格或任何你想要的字符。
     好的密语要30个以上的字符,难以猜出,由大小写字母、数字、非字母混合组成。密语可以用 -p 选项修改。

     丢失的密语不可恢复。如果丢失或忘记了密语,用户必须产生新的密钥,然后把相应的公钥分发到其他机器上去。

     RSA1的密钥文件中有一个"注释"字段,可以方便用户标识这个密钥,指出密钥的用途或其他有用的信息。
     创建密钥的时候,注释域初始化为"user@host",以后可以用 -c 选项修改。

     密钥产生后,下面的命令描述了怎样处置和激活密钥。可用的选项有:

     -atrials 在使用 -T 对 DH-GEX 候选素数进行安全筛选时需要执行的基本测试数量。

     -B      显示指定的公钥/私钥文件的 bubblebabble 摘要。

     -bbits 指定密钥长度。对于RSA密钥,最小要求768位,默认是2048位。DSA密钥必须恰好是1024位(FIPS 186-2 标准的要求)。

     -Ccomment 提供一个新注释

     -c      要求修改私钥和公钥文件中的注释。本选项只支持 RSA1 密钥。
             程序将提示输入私钥文件名、密语(如果存在)、新注释。

     -Dreader 下载存储在智能卡 reader 里的 RSA 公钥。

     -e      读取OpenSSH的私钥或公钥文件,并以 RFC 4716 SSH 公钥文件格式在 stdout 上显示出来。
             该选项能够为多种商业版本的 SSH 输出密钥。

     -Fhostnameknown_hosts 文件中搜索指定的 hostname ,并列出所有的匹配项。
             这个选项主要用于查找散列过的主机名/ip地址,还可以和 -H 选项联用打印找到的公钥的散列值。

     -ffilename 指定密钥文件名。

     -Goutput_file 为 DH-GEX 产生候选素数。这些素数必须在使用之前使用 -T 选项进行安全筛选。

     -g      在使用 -r 打印指纹资源记录的时候使用通用的 DNS 格式。

     -Hknown_hosts 文件进行散列计算。这将把文件中的所有主机名/ip地址替换为相应的散列值。
             原来文件的内容将会添加一个".old"后缀后保存。这些散列值只能被 sshsshd 使用。
             这个选项不会修改已经经过散列的主机名/ip地址,因此可以在部分公钥已经散列过的文件上安全使用。

     -i      读取未加密的SSH-2兼容的私钥/公钥文件,然后在 stdout 显示OpenSSH兼容的私钥/公钥。
             该选项主要用于从多种商业版本的SSH中导入密钥。

     -l      显示公钥文件的指纹数据。它也支持 RSA1 的私钥。
             对于RSA和DSA密钥,将会寻找对应的公钥文件,然后显示其指纹数据。

     -Mmemory 指定在生成 DH-GEXS 候选素数的时候最大内存用量(MB)。

     -Nnew_passphrase 提供一个新的密语。

     -Ppassphrase 提供(旧)密语。

     -p      要求改变某私钥文件的密语而不重建私钥。程序将提示输入私钥文件名、原来的密语、以及两次输入新密语。

     -q      安静模式。用于在 /etc/rc 中创建新密钥的时候。

     -Rhostnameknown_hosts 文件中删除所有属于 hostname 的密钥。
             这个选项主要用于删除经过散列的主机(参见 -H 选项)的密钥。

     -rhostname 打印名为 hostname 的公钥文件的 SSHFP 指纹资源记录。

     -Sstart 指定在生成 DH-GEX 候选模数时的起始点(16进制)。

     -Toutput_file 测试 Diffie-Hellman group exchange 候选素数(由 -G 选项生成)的安全性。

     -ttype 指定要创建的密钥类型。可以使用:"rsa1"(SSH-1) "rsa"(SSH-2) "dsa"(SSH-2)

     -Ureader 把现存的RSA私钥上传到智能卡 reader-v      详细模式。ssh-keygen 将会输出处理过程的详细调试信息。常用于调试模数的产生过程。
             重复使用多个 -v 选项将会增加信息的详细程度(最大3次)。

     -Wgenerator 指定在为 DH-GEX 测试候选模数时想要使用的 generator

     -y      读取OpenSSH专有格式的公钥文件,并将OpenSSH公钥显示在 stdout 上。


模数生成ssh-keygen 可以生成用于 Diffie-Hellman Group Exchange (DH-GEX) 协议的 groups 。
     生成过程分为两步:
     首先,使用一个快速且消耗内存较多的方法生成一些候选素数。然后,对这些素数进行适应性测试(消耗CPU较多)。

     可以使用 -G 选项生成候选素数,同时使用 -b 选项制定其位数。例如:

           # ssh-keygen -G moduli-2048.candidates -b 2048

     默认将从指定位数范围内的一个随机点开始搜索素数,不过可以使用 -S 选项来指定这个随机点(16进制)。

     生成一组候选数之后,接下来就需要使用 -T 选项进行适应性测试。
     此时 ssh-keygen 将会从 stdin 读取候选素数(或者通过 -f 选项读取一个文件),例如:

           # ssh-keygen -T moduli-2048 -f moduli-2048.candidates

     每个候选素数默认都要通过 100 个基本测试(可以通过 -a 选项修改)。
     DH generator 的值会自动选择,但是你也可以通过 -W 选项强制指定。有效的值可以是: 2, 3, 5

     经过筛选之后的 DH groups 就可以存放到 /etc/ssh/moduli 里面了。
     很重要的一点是这个文件必须包括不同长度范围的模数,而且通信双方双方共享相同的模数。


文件 ~/.ssh/identity
             该用户默认的 RSA1 身份认证私钥(SSH-1)。此文件的权限应当至少限制为"600"。
             生成密钥的时候可以指定采用密语来加密该私钥(3DES)。
             ssh(1) 将在登录的时候读取这个文件。

     ~/.ssh/identity.pub
             该用户默认的 RSA1 身份认证公钥(SSH-1)。此文件无需保密。
             此文件的内容应该添加到所有 RSA1 目标主机的 ~/.ssh/authorized_keys 文件中。

     ~/.ssh/id_dsa
             该用户默认的 DSA 身份认证私钥(SSH-2)。此文件的权限应当至少限制为"600"。
             生成密钥的时候可以指定采用密语来加密该私钥(3DES)。
             ssh(1) 将在登录的时候读取这个文件。

     ~/.ssh/id_dsa.pub
             该用户默认的 DSA 身份认证公钥(SSH-2)。此文件无需保密。
             此文件的内容应该添加到所有 DSA 目标主机的 ~/.ssh/authorized_keys 文件中。

     ~/.ssh/id_rsa
             该用户默认的 RSA 身份认证私钥(SSH-2)。此文件的权限应当至少限制为"600"。
             生成密钥的时候可以指定采用密语来加密该私钥(3DES)。
             ssh(1) 将在登录的时候读取这个文件。

     ~/.ssh/id_rsa.pub
             该用户默认的 RSA 身份认证公钥(SSH-2)。此文件无需保密。
             此文件的内容应该添加到所有 RSA 目标主机的 ~/.ssh/authorized_keys 文件中。

     /etc/ssh/moduli
             包含用于 DH-GEX 的 Diffie-Hellman groups 。文件的格式在 moduli(5) 手册页中描述。


参见ssh(1), ssh-add(1), ssh-agent(1), moduli(5), sshd(8)TheSecureShell(SSH)PublicKeyFileFormat, RFC 4716, 2006.


作者 OpenSSH is a derivative of the original and free ssh 1.2.12 release by
     Tatu Ylonen.  Aaron Campbell, Bob Beck, Markus Friedl, Niels Provos, Theo
     de Raadt and Dug Song removed many bugs, re-added newer features and
     created OpenSSH.  Markus Friedl contributed the support for SSH protocol
     versions 1.5 and 2.0.

OpenBSD 4.2                      May 31, 2007