ssh-key登录(SecureCRT)

# ssh XX.XX.x.xxx
# useradd yyy.www
# usermod -G wheel yyy.www
# mkdir /home/yyy.www/.ssh
在源主控上# scp /home/yyy.www/.ssh/authorized_keys 目标机器:/home/yyy.www/.ssh/

以上除非特别意外,一般地不需要修改文件目录权限和所属;
如果需要修改,则:
# chmod 644 authorized_keys
# chmod 700 .ssh

 

====================

如果报错:

Permission denied (publickey,gssapi-keyex,gssapi-with-mic).

参考下面地址,关闭SELINUX

http://flysnowxf.iteye.com/blog/1567570

前提: 
1.客户端生成了id_rsa.pub和id_rsa 
2.服务端在.ssh/authorized_keys也加入了客户端的id_res.pub 
3./etc/ssh/sshd_config开启了: 

Shell代码  收藏代码
  1. RSAAuthentication yes  
  2. PubkeyAuthentication yes  
  3. AuthorizedKeysFile     .ssh/authorized_keys  



但在客户端执行ssh依然报错: 

Shell代码  收藏代码
  1. Permission denied (publickey,gssapi-keyex,gssapi-with-mic).  



在这个页面不小心看到了原因: 
http://serverfault.com/questions/230771/ssh-configuration-publickeys-permission-denied-publickey-password-error 
又是TM的SELinux惹的祸,关闭SELinux解决问题: 
暂时关闭(重启后恢复): 

Shell代码  收藏代码
  1. setenforce 0  


永久关闭(需要重启): 

Shell代码  收藏代码
  1. vi /etc/selinux/config  
  2. SELINUX=disabled  



另: 
ssh可同时支持publickey和password两种授权方式,publickey默认不开启,需要配置为yes。 
如果客户端不存在.ssh/id_rsa,则使用password授权;存在则使用publickey授权;如果publickey授权失败,依然会继续使用password授权。

----------------------------------------

http://blog.chinaunix.net/uid-27022856-id-3957852.html

linux SecureCRT ssh key认证登陆

 

通过SecureCRT创建key登录认证

一、生成公钥/密钥对

使用SecureCRT的    工具->创建公钥 即可,加密算法选择RSA,因为sshd配置文件中选择了RSA算法

 

 

 

 

这一步中,通行短语可以不输入。但要求输入,登陆的时候会要求你输入通行短语。

并修改Comment 相关信息,采用   个人账户名称@服务器信息 方式

(可以所有的服务器都使用一个密钥对)

 

 

填写密钥长度,默认是1024

 

注意保存好密钥对,建议使用手机保存

这里选择生成的密钥使用 OpenSSH Key 格式。如果选择默认的格式,上传到服务器的时候需要执行格式转换的工作,需要通过命令行来连接的也需要通过securecrt来转换私钥为openssh格式,这里建议采用openssh key格式!

点击完成后会生成两个文件,默认是Identity和Identity.pub,其中Identity为私钥,Identity.pub为公钥。

 

 

二、服务器端的配置

上传Windows客户机SecureCRT生成的公钥 Identity.pub到用户home目录下.ssh文件夹中,一般是用ftp上传.注意上传之前,一定要以ASCII格式上传。

以本人用户为例

cd /home/yangzg

mkdir .ssh  #在需要开启ssh连接的用户目录下建立 .ssh目录

chmod 700 .ssh

cd .ssh

mv Identity.pub authorized_keys  #如果采用的格式不是openssh的话,就需要执行ssh-keygen -i -f Identity.pub >>authorized_keys 命令进行格式转换

chmod 644 .ssh/authorized_keys

 

              更改ssh配置文件

vim /etc/ssh/sshd_config #修改,确认 ssh配置文件

PermitRootLogin no                       #禁止root登录

PubkeyAuthentication yes                  #启用公告密钥配对认证方式

AuthorizedKeysFile .ssh/authorized_keys

RSAAuthentication yes                    #允许RSA密钥

PasswordAuthentication no                #禁止密码验证登录,如果启用的话,OpenSSH的 RSA认证登录就没有意义了。

重新加载sshd服务,使用/etc/init.d/ssh restart即可

到此,设置完成。可能通过新建会话来检验,在SecureCRT中新建会话时选择使用公钥认证即可,去掉密码验证,做登陆验证。

 

    

登陆测试,输入密钥通行短语,看看是否登录成功!如果登录不成功请从下面几个方面查看:

  • 权限是否是644
  • 属主是否正确
  • 选择创建密钥的时候选择的是否是openssh,如果不是需要转换格式

                  

 

三、采用命令行方式通过证书登录的设置

  • 采用的openssh格式的证书的配置

直接将私钥Identity传输到对应的.ssh目录,比如传输到/home/zhangxy/.ssh,chmod 600 /home/zhangxy/.ssh/Identity

ssh -i /home/zhangxy/.ssh/Identity zhangxy@172.16.88.11  输入通行短语就可以连接进去了

  • 采用标准公钥和VanDyke私钥格式的配置

先将私钥转化成openssh格式

 

 

转换后将Identity私钥转换到对应的.ssh目录,后面的操作和前面一样,这里就不赘述了!

 

 

四、Purry使用SecureCRT的私钥做证书登录配置

  • 采用openssh格式的putty证书配置

直接利用puttygen.exe导入私钥,生成证书

 

 

导入后点击save private key保存证书就可以了!

打开purry,选择上一步创建的证书

 

 

配置完成,连接服务器看是否OK!

 

  • 采用标准公钥和VanDyke私钥格式的putty证书配置

需要先将私钥转换为openssh格式,后面的操作和openssh格式的putty证书配置一样,这里不再赘述!

 ========================================

http://blog.licess.com/sshd_config/

最近,一直再捣鼓LNMP已经Shell脚本方面、以及自动化方面的东西,整理一下发在这里。

# 1. 关于 SSH Server 的整体设定,包含使用的 port 啦,以及使用的密码演算方式
Port 22          # SSH 预设使用 22 这个 port,您也可以使用多的 port !
              # 亦即重复使用 port 这个设定项目即可!
Protocol 2,1        # 选择的 SSH 协议版本,可以是 1 也可以是 2 ,
              如果要同时支持两者,就必须要使用 2,1 这个分隔了!
#ListenAddress 0.0.0.0   # 监听的主机适配卡!举个例子来说,如果您有两个 IP,
              # 分别是 192.168.0.100 及 192.168.2.20 ,那么只想要
              # 开放 192.168.0.100 时,就可以写如同下面的样式:
ListenAddress 192.16.0.100          # 只监听来自 192.168.0.100 这个 IP 的SSH联机。
                   # 如果不使用设定的话,则预设所有接口均接受 SSH
PidFile /var/run/sshd.pid      # 可以放置 SSHD 这个 PID 的档案!左列为默认值
LoginGraceTime 600     # 当使用者连上 SSH server 之后,会出现输入密码的画面,
              # 在该画面中,在多久时间内没有成功连上 SSH server ,
              # 就断线!时间为秒!
Compression yes      # 是否可以使用压缩指令?当然可以啰!
 
# 2. 说明主机的 Private Key 放置的档案,预设使用下面的档案即可!
HostKey /etc/ssh/ssh_host_key    # SSH version 1 使用的私钥
HostKey /etc/ssh/ssh_host_rsa_key  # SSH version 2 使用的 RSA 私钥
HostKey /etc/ssh/ssh_host_dsa_key  # SSH version 2 使用的 DSA 私钥

 

# 2.1 关于 version 1 的一些设定!
KeyRegenerationInterval 3600     # 由前面联机的说明可以知道, version 1 会使用 
                   # server 的 Public Key ,那么如果这个 Public 
                   # Key 被偷的话,岂不完蛋?所以需要每隔一段时间
                   # 来重新建立一次!这里的时间为秒!
ServerKeyBits 768           # 没错!这个就是 Server key 的长度!
# 3. 关于登录文件的讯息数据放置与 daemon 的名称!
SyslogFacility AUTH         # 当有人使用 SSH 登入系统的时候,SSH会记录资
                   # 讯,这个信息要记录在什么 daemon name 底下?
                   # 预设是以 AUTH 来设定的,即是 /var/log/secure
                   # 里面!什么?忘记了!回到 Linux 基础去翻一下
                   # 其它可用的 daemon name 为:DAEMON,USER,AUTH,
                   # LOCAL0,LOCAL1,LOCAL2,LOCAL3,LOCAL4,LOCAL5,
LogLevel INFO            # 登录记录的等级!嘿嘿!任何讯息!
                   # 同样的,忘记了就回去参考!
# 4. 安全设定项目!极重要!
# 4.1 登入设定部分
PermitRootLogin no     # 是否允许 root 登入!预设是允许的,但是建议设定成 no!
UserLogin no        # 在 SSH 底下本来就不接受 login 这个程序的登入!
StrictModes yes      # 当使用者的 host key 改变之后,Server 就不接受联机,
              # 可以抵挡部分的木马程序!
#RSAAuthentication yes   # 是否使用纯的 RSA 认证!?仅针对 version 1 !
PubkeyAuthentication yes  # 是否允许 Public Key ?当然允许啦!只有 version 2
AuthorizedKeysFile      .ssh/authorized_keys
              # 上面这个在设定若要使用不需要密码登入的账号时,那么那个
              # 账号的存放档案所在档名!
# 4.2 认证部分
RhostsAuthentication no  # 本机系统不止使用 .rhosts ,因为仅使用 .rhosts 太
              # 不安全了,所以这里一定要设定为 no !
IgnoreRhosts yes      # 是否取消使用 ~/.ssh/.rhosts 来做为认证!当然是!
RhostsRSAAuthentication no # 这个选项是专门给 version 1 用的,使用 rhosts 档案在
              # /etc/hosts.equiv配合 RSA 演算方式来进行认证!不要使用
HostbasedAuthentication no # 这个项目与上面的项目类似,不过是给 version 2 使用的!
IgnoreUserKnownHosts no  # 是否忽略家目录内的 ~/.ssh/known_hosts 这个档案所记录
              # 的主机内容?当然不要忽略,所以这里就是 no 啦!
PasswordAuthentication yes # 密码验证当然是需要的!所以这里写 yes 啰!
PermitEmptyPasswords no  # 若上面那一项如果设定为 yes 的话,这一项就最好设定
              # 为 no ,这个项目在是否允许以空的密码登入!当然不许!
ChallengeResponseAuthentication yes  # 挑战任何的密码认证!所以,任何 login.conf 
                   # 规定的认证方式,均可适用!
#PAMAuthenticationViaKbdInt yes      # 是否启用其它的 PAM 模块!启用这个模块将会
                   # 导致 PasswordAuthentication 设定失效!
 
# 4.3 与 Kerberos 有关的参数设定!因为我们没有 Kerberos 主机,所以底下不用设定!
#KerberosAuthentication no
#KerberosOrLocalPasswd yes
#KerberosTicketCleanup yes
#KerberosTgtPassing no
 
# 4.4 底下是有关在 X-Window 底下使用的相关设定!
X11Forwarding yes
#X11DisplayOffset 10
#X11UseLocalhost yes
# 4.5 登入后的项目:
PrintMotd no              # 登入后是否显示出一些信息呢?例如上次登入的时间、地点等
             # 等,预设是 yes ,但是,如果为了安全,可以考虑改为 no !
PrintLastLog yes     # 显示上次登入的信息!可以啊!预设也是 yes !
KeepAlive yes       # 一般而言,如果设定这项目的话,那么 SSH Server 会传送
             # KeepAlive 的讯息给 Client 端,以确保两者的联机正常!
             # 在这个情况下,任何一端死掉后, SSH 可以立刻知道!而不会
             # 有僵尸程序的发生!
UsePrivilegeSeparation yes # 使用者的权限设定项目!就设定为 yes 吧!
MaxStartups 10      # 同时允许几个尚未登入的联机画面?当我们连上 SSH ,
             # 但是尚未输入密码时,这个时候就是我们所谓的联机画面啦!
             # 在这个联机画面中,为了保护主机,所以需要设定最大值,
             # 预设最多十个联机画面,而已经建立联机的不计算在这十个当中
# 4.6 关于使用者抵挡的设定项目:
DenyUsers *        # 设定受抵挡的使用者名称,如果是全部的使用者,那就是全部
             # 挡吧!若是部分使用者,可以将该账号填入!例如下列!
DenyUsers test
DenyGroups test      # 与 DenyUsers 相同!仅抵挡几个群组而已!
# 5. 关于 SFTP 服务的设定项目!
Subsystem       sftp    /usr/lib/ssh/sftp-server
 
基本上,在您的系统中,『除非有必要,否则请不要更改 /etc/ssh/sshd_config 这个档案的设定值!』因为预设的情况下通常都是最严密的 SSH 保护了,因此,可以不需要更动他!上面的说明仅是在让大家了解每个细项的一些基本内容而已!需要注意的是最后一项,如果您不愿意开放 SFTP 的话,将最后一行批注掉即可!
 
另外,如果您修改过上面这个档案(/etc/ssh/sshd_config),那么就必需要重新启动一次 sshd 这个 daemon 才行!亦即是:
/etc/rc.d/init.d/sshd restart

另外自己在网上找了几个doc:http://doc.licess.org/openssh/sshd_config.html 方便以后查阅。

http://www.tuicool.com/articles/EBjayy

=====================================

 

http://www.cnblogs.com/ifantastic/p/3984150.html

[Linux] 在 Linux CLI 使用 ssh-keygen 生成 RSA 密钥

 

  RSA 是一种公钥加密算法,在 1977 年由麻省理工学院的 Ron Rivest, Adi Shamir, Leonard Adleman 三人一起提出,因此该算法命名以三人姓氏首字母组合而成。

 

  SSH 是 Secure Shell 缩写,是建立在应用层和传输层基础上的安全协议,为计算机上运行的 Shell 提供安全的传输和使用环境。

 

  传统的 rsh, FTP, POP 和 Telnet 网络协议因为传输时采用明文,很容易受到中间人方式攻击。为了防止远程传输信息出现泄露,SSH 协议支持对传输的数据进行加密,因此它还能防止 DNS 和 IP 欺骗。另外采取 SSH 协议传输的数据可以进行压缩,所以可以加快数据传输速度。最初 SSH 协议由芬兰的 Tatu Ylönen 在 1995 年设计开发,目前属于 SSH Communications Security 拥有,由于版权原因,1999 年 10 月开源软件 OpenSSH 被开发出来,它已成为事实上的 SSH 协议标准实现(SSH Communications Security 提供的 SSH 软件使用不同于 OpenSSH 的私钥格式),也是目前 Linux 标准配置。

 

基本框架

 

  SSH 协议主要分成三个协议:

  1. 传输层协议(The Transport Layer Protocol):传输层协议提供服务器认证,数据机密性,信息完整性等支持。

  2. 用户认证协议(The User Authentication Protocol):用户认证协议为服务器提供客户端的身份鉴别。

  3. 连接协议(The Connection Protocol):连接协议将加密的信息隧道划分成若干逻辑通道,提供给更高层应用协议使用。

 

验证方式

 

  SSH 提供两种安全验证方式:

  1. 基于口令:客户端使用账号和口令登录服务器,所有传输数据都会被加密。但可能存在伪造服务器冒充真正的服务器与客户端进行交互,不能避免中间人攻击。

  2. 基于密钥:使用一对密钥(私钥 + 公钥),将公钥放置到服务器注册。当用户从客户端登录服务器时,服务器会接到使用密钥(即注册在服务器的公钥)进行安全验证请求,服务器首先比对从客户端 发送过来的公钥与在己方注册的公钥是否一致,如果一致,服务器会使用该公钥加密数据向客户端发起 "挑战"[1],从而避免中间人攻击。

 

OpenSSH 提供的工具

 

  OpenSSH 提供了以下几个工具:

  1. ssh:实现 SSH 协议,用以建立安全连接,它替代了较早的 rlogin 和 Telnet。

  2. scp, sftp:利用 SSH 协议远程传输文件,它替代了较早的 rcp。

  3. sshd:SSH 服务器守护进程,运行在服务器端。

  4. ssh-keygen:用以生成 RSA 或 DSA 密钥对。

  5. ssh-agent, ssh-add:管理密钥的工具。

  6. ssh-keyscan:扫描网络中的主机,记录找到的公钥。

  

生成密钥对

 

  使用 ssh-keygen 生成一个密钥对(私钥 + 公钥):

复制代码
$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/home/xavier/.ssh/id_rsa): id_rsa
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in id_rsa.
Your public key has been saved in id_rsa.pub.
The key fingerprint is:
ce:89:59:3d:a1:3a:99:b3:01:46:78:0f:d1:cc:d4:fa xavier@Qbee-X
The key's randomart image is:
+--[ RSA 2048]----+
|    .=..         |
|   . .+ .        |
|  . +  .  .      |
|   o o.  o .     |
|    o ..S o      |
|   . . XE. .     |
|      X +        |
|       =         |
|      .          |
+-----------------+
复制代码

 

  ssh-keygen 默认使用 RSA 算法,长度为 2048 位,生成一个私钥文件 id_rsa 和一个公钥文件 id_rsa.pub,两个文件默认保存在用户的 ~/.ssh 目录下。你可以在命令行交互过程指定密钥文件路径,也可以设置密钥口令,如果设置了密钥口令,在使用密钥进行登录时,需要输入口令。

 

  ssh-keygen 支持 -f 选项指定密钥文件路径,-t 选项指定加密算法,-b 选项指定密钥长度,-N 选项指定密钥口令,-C 选项指定注释。

 

  只要将公钥文件 id_rsa.pub 提交给服务器,读取该文件包含的字符串并追加到服务器端用户的主目录 ~/.ssh/authorized_keys 文件中,持有私钥的客户端就可以使用 SSH 协议登录服务器了。

 

  SSH 1 协议支持 RSA 算法,SSH 2 协议支持 RSA 和 DSA 两种算法。ssh-keygen 使用 -t 选项来指明加密算法,rsa1 表示支持 SSH 1,dsa, ecdsa, rsa 表示支持 SSH 2。

 

  生成支持 SSH 1 的 RSA 密钥:

复制代码
$ ssh-keygen -t rsa1 -f id-rsa1
Generating public/private rsa1 key pair.
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in id-rsa1.
Your public key has been saved in id-rsa1.pub.
The key fingerprint is:
c8:81:8f:dc:cd:ba:86:d2:56:e8:d5:13:3f:57:a5:f9 xavier@Qbee-X
The key's randomart image is:
+--[RSA1 2048]----+
|                 |
|     .          .|
|    . .        + |
|   . = =.     +  |
|    o.=.So   . . |
|    . o.o o .   E|
|   o +.  . o     |
|  . = ..         |
|   o ..          |
+-----------------+
复制代码

 

  从私钥文件生成公钥文件:

$ ssh-keygen -y -f id-rsa
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDmg/9Hoc98c6AIlEPYK6VqE3ZTlMlfXqn2VgU0NAPXeRmYX+jHYZXA5AxMNTD8KgZIuilK23qzzKBy0hgoO9DDpsBg98Pf4NLkHjTcjpPFX1TBD6RWO/OX/g4uN+gZH1/zoREJa4fit8SSG2V2GoQkqrhfRYCy+a9mQX29ZvOLfYK/aMVjb+yfzLJychdvV3CQkDvkd5R/DHNU6ZQ3pyIEjA/cUQqqmgxQj0f72y8IXv8zesXtjXaaKG17R2oSN1MNDZo/y4m426MYxl4mMQMvM5yR3UvhD93pgNgaR8LY/vspcIeE6cJZsGl21oYtrDZ/GdmF5ulMGwjIDfTJRLvb

 

  修改私钥文件的注释和口令(仅支持 RSA1,如果原 RSA1 文件含有注释或口令,才会提示修改相应的注释或口令。):

$ ssh-keygen -c 
Enter file in which the key is (/home/xavier/.ssh/id_rsa): id-rsa1
Key now has comment 'Hello'
Enter new comment: HelloWorld
The comment in your key file has been changed.

 

  修改私钥文件口令(命令:ssh-keygen -p [-P old_password] [-N new_password] [-f keyfile])

$ ssh-keygen -p -f id-rsa
Key has comment 'id-rsa'
Enter new passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved with the new passphrase.

 

  如果想要取消口令,只需要在输入密码为空即可。私钥口令只是对私钥文件的访问权限,修改和删除口令并不影响私钥内容。

 

公钥指纹

 

  由于公钥长度一般都是 1024 或 2048 个字节,不方便进行比对,因此通常使用一个较短的字符串来代表它,这个就是公钥指纹。公钥指纹的计算方法一般就是对公钥字符串进行 MD5 或者 SHA-1 等摘要计算得到,一个 1024 字节长度的 RSA 算法公钥,经过指纹计算后得到的公钥指纹只有 128(MD5摘要)字节或者 160(SHA-1)字节。

 

  你可以使用 ssh-keygen 工具来计算公钥指纹:

$ ssh-keygen -l -f id_rsa.pub
2048 ce:89:59:3d:a1:3a:99:b3:01:46:78:0f:d1:cc:d4:fa  xavier@Qbee-X (RSA)

 

  如果客户端是第一次访问服务器,系统会提示以下信息:

$ ssh xavier@192.168.1.5
The authenticity of host '192.168.1.5 (192.168.1.5)' can't be established.
RSA key fingerprint is 1c:bb:f1:e5:40:34:75:d3:37:b7:8f:b3:4a:6f:b6:47.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.1.5' (RSA) to the list of known hosts.

 

  这是因为客户端第一次连接目标服务器,客户端没有目标服务器的公钥存根,因此系统告诉你目前正在连接的服务器所使用的公钥指纹(公钥指纹代表着公钥,但长度较短便于识别),需要你看看这个指纹是否正确,如果正确就正式建立连接,如果指纹可疑就不要建立连接。

 

  这个公钥指纹是基于服务器的公钥计算而来,服务器的公钥一般保存在 /etc/ssh/ssh_host_rsa_key.pub 文件中。如果你事先知道服务器公钥,那么你自然可以轻松识别指纹并决定是否建立连接,但如果是在互联网中连接陌生服务器,你并知道目标服务器的公钥,这样 就无法识别当前指纹是不是恶意的中间人服务器提供的,为了解决这个问题,服务器端管理员需要提前公示自己的公钥,或者是从证书机构申请证书,用户只要使用 公示的公钥,或者去颁证机构认证下载证书就可以识别当前连接的服务器是否是虚假的中间人。

 

  一旦你确认指纹合法性并建立连接后,客户端就会将服务器的公钥保存在 $HOME/.ssh/known_hosts 文件中,下次连接时系统自动将对方发过来的公钥与已知公钥进行比对,如果正确就直接建立连接,如果不正确将给出警告提示说公钥不匹配并阻止建立连接。

 

  当由于公钥不匹配而无法建立连接时,可能有几个原因,一是目标服务器更换了公钥;二是目标服务器更换了 IP 地址或者域名,导致你连接到其他主机致使公钥不匹配;三是有恶意攻击者截断了连接,正在使用伪造的主机地址试图欺骗你建立连接。无论是哪个原因,你都应该 保持警惕,谨慎建立连接。

  

 

  

注:

[1] "挑战" 是指服务器使用公钥加密数据发送给客户端,客户端使用配对的私钥对数据进行解密,客户端成功解密后将答案发回服务器进行验证,结果一致则挑战成功,表示客户端是合法用户可以进行安全通信。

 

附:

1. RSA 算法

 

 

http://blog.csdn.net/wangjunjun2008/article/details/20037101

~~~~~~~~~~~~~~~~~~~~~~仅想知道操作,阅读以下两步即可~~~~~~~~~~~~~~~~

在信任环境下,如果每次远程登录时,都要输入密码,感觉太浪费时间了,尤其是密码很复杂、维护的服务器比较多的情况下。

 

于是有了正常需求:不用输入密码即可实现远程登录。

实现步骤如下:

1、本地生成一对秘钥文件(公钥和私钥);

$ ssh-keygen

#以上命令等价于 ssh-keygen -t rsa

#-t:指定密钥的类型,默认为SSH-2 的rsa类型;

运行上面的命令后,系统会出现一系列提示,可以一路回车。特别说明,其中有一个问题是,要不要对私钥设置口令(passphrase),如果担心私钥的安全,可以设置一个。运行结束以后,会在 ~/.ssh/ 目录下新生成两个文件:id_rsa.pubid_rsa。前者公钥,后者是私钥。

 

2、将公钥传送到远程主机host上面;

$ ssh-copy-id user@host

经过以上两步之后,就可以实现无密码远程登录了(远程主机将用户的公钥保存在~/.ssh/authorized_keys文件中)。 

~~~~~~~~~~~~~~~以下为介绍及原理啥的,可略过~~~~~~~~~~~~~


SSH是一种安全通道协议,主要用来远程登录。在RHEL 5系统中使用的是OpenSSH服务器由openssh,openssh-server等软件包提供的(默认已经安装),并以将sshd添加为标准的系统服务。使用方法如下:

$ ssh host

$ ssh username@host

$ ssh -p 222 username@host

-p:指定访问端口;如果省略该参数,则默认访问SSH服务的默认端口22;

 

如果是第一次登录对方主机,则系统会出现一下提示:

The authenticity of host 'host(192.168.0.21)' can't be established.

RSA key fingerprint is 98:2e:d7:e0:de:9f:ac:67:28:c2:42:2d:37:16:58:4d.

Are you sure you want to continue connecting (yes/no)?

这段话是说,无法确认host主机的真实性,只知道它的公钥指纹,问你还想继续连接吗?

输入yes之后,系统会出现一句提示,表示host主机已经得到认可。

Warning: Permanently added 'host,192.168.0.21' (RSA) to the list of known hosts.

然后要求输入秘密:

$ Password: (enter password)

此时,如果秘密正确,就可以登录了。


~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

 


常见问题:

1、生成密钥并上传至远程主机后,仍然无法实现无密码登录?

打开远程主机的 /etc/ssh/sshd_config 这个文件,以下几行取消注释。

#RSAAuthentication=yes

#PubkeyAuthentication=yes

#AuthorizedKeysFile=.ssh/authorized_keys

然后,重启远程主机的ssh服务。

#ubuntu系统

$ service ssh restart

#debian系统

$ /etc/init.d/ssh restart


 

2、执行ssh-copy-id 命令时,远程服务器的SSH服务端口不是22,如下:

$ ssh-copy-id nameB@machineB

ssh: connect to host machineB port 22: Connection refused

则使用如下命令:

ssh-copy-id "-p 22000 nameB@machineB"



3、ssh连接远程主机时,出现 WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED 警告。



分析原因:系统重装、帐号信息修改等都会造成密钥失效。
解决方法:删除无效的密钥,重新生成即可。
vi ~/.ssh/known_hosts
找到和远程主机ip一致的密钥,将其删除即可。


 

补充内容:

 

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

ssh-copy-id -u eucalyptus -i /home/eucalyptus/.ssh/id_rsa.pub eucalyptus@remote_host

#-u:给eucalyptus用户设置无密码登陆

#-i:当没有值传递时或 ~/.ssh/identity.pub 文件不可访问(不存在),ssh-copy-id将显示如下错误

/usr/bin/ssh-copy-id: ERROR: No identities found

 

SSH提供两种方式的登录验证:

1、密码验证:以服务器中本地系统用户的登录名称,密码进行验证。

2、秘钥对验证:要求提供相匹配的秘钥信息才能通过验证。通常先在客户机中创建一对秘钥文件(公钥和私钥),然后将公钥文件放到服务器中的指定位置。

注意:当密码验证和私钥验证都启用时,服务器将优先使用秘钥验证。

 

SSH服务的配置文件:

sshd服务的配置文件默认在/etc/ssh/sshd_config,正确调整相关配置项,可以进一步提高sshd远程登录的安全性。

配置文件的内容可以分为以下三个部分:

[python] view plaincopy在CODE上查看代码片派生到我的代码片
 
  1. #SSH服务器监听的选项  
  2. #监听的端口  
  3. Port 22   
  4. #使用SSH V2协议  
  5. Protocol 2  
  6. #监听的地址为所有地址  
  7. ListenAdderss 0.0.0.0  
  8. #//禁止DNS反向解析  
  9. UseDNS no  
  10.   
  11. #用户登录控制选项  
  12. #是否允许root用户登录  
  13. PermitRootLogin no  
  14. #是否允许空密码用户登录  
  15. PermitEmptyPasswords no  
  16. #登录验证时间(2分钟)  
  17. LoginGraceTime 2m  
  18. #最大重试次数  
  19. MaxAuthTries 6  
  20. #只允许user用户登录,与DenyUsers选项相反  
  21. AllowUsers user  
  22.   
  23. #登录验证方式  
  24. #启用密码验证  
  25. PasswordAuthentication yes  
  26. #启用秘钥验证  
  27. PubkeyAuthentication yes  
  28. #指定公钥数据库文件  
  29. AuthorsizedKeysFile .ssh/authorized_keys  


 

查看SSH服务状态命令:/etc/init.d/sshd status

重新启动SSH服务命令:/etc/init.d/sshd restart

 

查看ssh软件的版本号命令:$ ssh -V 
OpenSSH_3.9p1, OpenSSL 0.9.7a Feb 19 2003 #表明该系统正在使用OpenSSH

ssh: SSH Secure Shell 3.2.9.1 (non-commercial version) on i686-pc-linux-gnu #表明该系统正在使用SSH2

 

当远程主机的公钥被接受以后,它就会被保存在文件$HOME/.ssh/known_hosts之中。下次再连接这台主机,系统就会认出它的公钥已经保存在本地了,从而跳过警告部分,直接提示输入密码。

每个SSH用户都有自己的known_hosts文件,此外系统也有一个这样的文件,通常是/etc/ssh/ssh_known_hosts,保存一些对所有用户都可信赖的远程主机的公钥。

 

 

本文参考如下文章:

http://roclinux.cn/?p=2551

http://www.ruanyifeng.com/blog/2011/12/ssh_remote_login.html

http://blog.chinaunix.net/uid-26284395-id-2949145.html

 

 

http://blog.csdn.net/leexide/article/details/17252369

一、SSH简介

    SSH是一个专为远程登录会话和其他网络服务提供安全性的协议。默认状态下SSH链接是需要密码认证的,可以通过添加系统认证(即公钥-私钥)的修改,修改后系统间切换可以避免密码输入和SSH认证。

二、公钥认证的基本思想:

    对信息的加密和解密采用不同的key,这对key分别称作private key和public key,其中,public key存放在欲登录的服务器上,而private key为特定的客户机所持有。

    当客户机向服务器发出建立安全连接的请求时,首先发送自己的public key,如果这个public key是被服务器所允许的,服务器就发送一个经过public key加密的随机数据给客户机,这个数据只能通过private key解密,客户机将解密后的信息发还给服务器,服务器验证正确后即确认客户机是可信任的,从而建立起一条安全的信息通道。

    通过这种方式,客户机不需要向外发送自己的身份标志“private key”即可达到校验的目的,并且private key是不能通过public key反向推断出来的。这避免了网络窃听可能造成的密码泄露。客户机需要小心的保存自己的private key,以免被其他人窃取,一旦这样的事情发生,就需要各服务器更换受信的public key列表。

三、实验网络拓扑图和实验目的

1、网络拓扑图

 

如下所示:


2、实现目的

服务器1,服务器2,服务器3能实现彼此无密码登录。

3、补充说明

 

Linux下修改主机名的完整步骤如下:
第一步:

  1. #hostname Server1  

第二步:

  1. 修改/etc/sysconfig/network中的hostname  

第三步:

  1. 修改/etc/hosts文件  

 

四、无密码登录实现方式

1、用ssh-keygen创建公钥

(1)在服务器1上执行下面的命令:

  1. [root@Server1 ~]# ssh-keygen -t rsa  
  2. Generating public/private rsa key pair.  
  3. Enter file in which to save the key(/root/.ssh/id_rsa):  
  4. Created directory '/root/.ssh'.  
  5. Enter passphrase (empty for no passphrase):  
  6. Enter same passphrase again:  
  7. Your identification has been saved in/root/.ssh/id_rsa.  
  8. Your public key has been saved in/root/.ssh/id_rsa.pub.  
  9. The key fingerprint is:  
  10. 7b:aa:08:a0:99:fc:d9:cc:d8:2e:4b:1a:c0:6b:da:e4root@Server1  
  11. The key's randomart image is:  
  12. +--[ RSA 2048]----+  
  13. | |  
  14. | |  
  15. | |  
  16. |. |  
  17. |o. S |  
  18. |++. . |  
  19. |+=o. . . |  
  20. |o+=oB. o |  
  21. |..E==*... |  
  22. +-----------------+  

    输入后,会提示创建.ssh/id_rsa、id_rsa.pub的文件,其中第一个为密钥,第二个为公钥。过程中会要求输入密码,为了ssh访问过程无须密码,可以直接回车 。

 

(2)补充说明:
ssh-keygen:生成秘钥
其中:

  -t指定算法
  -f 指定生成秘钥路径
  -N 指定密码

 

2、查看钥匙

  1. [root@Server1 ~]# ls -l .ssh  
  2. 总用量 8  
  3. -rw-------. 1 root root 1675 12月 10 22:20 id_rsa  
  4. -rw-r--r--. 1 root root 394 12月 10 22:20 id_rsa.pub  

   可以发现 ssh目录下的两枚钥匙。

3.将公钥复制到被管理机器Server2和Server3下的.ssh目录下(先确保存在这个目录)

  1. [root@server1 .ssh]# scp id_rsa.pubroot@192.168.1.3:~/.ssh/  
  2. The authenticity of host '192.168.1.3(192.168.1.3)' can't be established.  
  3. RSA key fingerprint is93:eb:f9:47:b1:f6:3f:b4:2e:21:c3:d5:ab:1d:ae:65.  
  4. Are you sure you want to continueconnecting (yes/no)? yes  
  5. Warning: Permanently added '192.168.1.3'(RSA) to the list of known hosts.  
  6. root@192.168.1.3's password:  
  7. id_rsa.pub   
  8. [root@server1 .ssh]# scp id_rsa.pubroot@192.168.1.4:~/.ssh/authorized_keys  
  9. The authenticity of host '192.168.1.4(192.168.1.4)' can't be established.  
  10. RSA key fingerprint is93:eb:f9:47:b1:f6:3f:b4:2e:21:c3:d5:ab:1d:ae:65.  
  11. Are you sure you want to continueconnecting (yes/no)? yes  
  12. Warning: Permanently added '192.168.1.4'(RSA) to the list of known hosts.  
  13. root@192.168.1.4's password:  
  14. id_rsa.pub   

到Server2和Server3目录下执行下面的命令

  1. #cat id_dsa.pub >> ~/.ssh/authorized_keys  

4、设置文件和目录权限:

设置authorized_keys权限

  1. $ chmod 600 authorized_keys   

设置.ssh目录权限

  1. $ chmod 700 -R .ssh  

5、验证使用SSH IP地址的方式无密码访问

  1. [root@server1 .ssh]# ssh 192.168.1.3  
  2. Last login: Tue Dec 10 22:34:02 2013  
  3. [root@Server2 ~]#  
  4. [root@Server2 ~]#  
  5. [root@Server2 ~]#  

 

 

6、验证使用SSH 主机名的方式无密码访问

我们在Server1上将Server2和Server3的IP地址解析为主机名

  1. [root@server1 .ssh]# cat /etc/hosts  
  2. 192.168.1.2 Server1  
  3. 192.168.1.3 Server2  
  4. 192.168.1.4 Server3  

我们试试下面这种ssh登录方式:

  1. [root@server1 .ssh]# ssh Server3  
  2. The authenticity of host 'server3(192.168.1.4)' can't be established.  
  3. RSA key fingerprint is93:eb:f9:47:b1:f6:3f:b4:2e:21:c3:d5:ab:1d:ae:65.  
  4. Are you sure you want to continueconnecting (yes/no)? yes  
  5. Warning: Permanently added 'server3' (RSA)to the list of known hosts.  
  6. Last login: Tue Dec 10 22:34:08 2013  

五、注意:

1、文件和目录的权限千万别设置成chmod 777.这个权限太大了,不安全,数字签名也不支持。
2、生成的rsa/dsa签名的公钥是给对方机器使用的。这个公钥内容还要拷贝到authorized_keys
3、linux之间的访问直接 ssh 机器ip
4、某个机器生成自己的RSA或者DSA的数字签名,将公钥给目标机器,然后目标机器接收后设定相关权限(公钥和authorized_keys权限),这个目标机就能被生成数字签名的机器无密码访问了

 

 

http://bjmqz.blog.51cto.com/836074/1532920

在用windows时管理linux服务器时,常会用到SecureCRT、Xshell以及开源的putty。在我工作环境大多都是采用密码认证的方式进行登录。今天对学习了些SecureCRT的密钥登录方式。对比密码认证方式,使用密钥认证登录会有以下几个优点:

1、公钥认证允许使用空密码,省去每次登录都需要输入密码的麻烦
2、多用户管理服务器时,可以通过多个公钥登录同一用户下,可以避免因为密码认证被用户都需要密码,导致的密码容易泄密的危险。并且使用passwd修改密码,也不会影响到其他用户的登录。
3、做空密码的公钥认证,为运维自动化提供了便捷方法。
4、如果使用putty软件,暂时不支持密码保存功能,每次登录都必须输入相应的密码,而密钥管理可以方便的进行登录,省去输入密码的麻烦操作。
了解了这个优点后,本文开始关于SecureCRT使用密钥登录设置过程。
1、在SecureCRT上生成密钥。

wKioL1PYtIjjUObVAAGL7z-1Vzw201.jpg

点击下一步

wKiom1PYtFDy1dD-AAF3-H6A_xI083.jpg

 

加密方式有两种,分别为DSA和RSA,在OpenSSL都支持,随便选择一个都可以,下一步

 

wKioL1PYtWqz1lsCAAEOIwTmSxg982.jpg

输入你登录时候要使用的密码 这个只是你自己的key对应的密码不建议为空。

wKioL1PYtWuR422XAAGGA2895w4258.jpg

密码的默认长度是1024

wKioL1PYtWvBlLWTAAFLmRPkDVQ201.jpg

密钥生成。

wKiom1PYtFKTcrSFAAEhir3p0RY576.jpg

 

注意这里设置为OpenSSH格式,这样就完成了。

 

wKiom1PYtFLDzmBQAAGRk_8ppx8613.jpg

 

2、把公钥拷贝到服务器
在生成的密钥里面有两个文件,一个公钥文件(Identity.pub),一个私钥(Identity)。
需要把Identity.pub内的内容拷贝到Linux服务器的特定文件中:~/.ssh/authroized_keys
其中,“~”表示对应用户的主目录,以root为例。如果你是用test用户登录的话需要把Identity.pub拷贝到/home/test/.ssh 若.ssh目录不存在,请创建它,并把公钥信息写入文件中:
[root@hr35 ~]# mkdir ~/.ssh 
[root@hr35 ~]# chmod 700 ~/.ssh 
[root@hr35 ~]# vi ~/.ssh/authorized_keys 
[root@hr35 ~]# chmod 644 ~/.ssh/authorized_keys

[root@hr35 ~]# ssh-keygen -i -f /opt/Identity.pub  >> /root/.ssh/authorized_keys 将公钥导入到 authorized_keys文件中

注意:必须要注意~/.ssh 的全新必须为700,~/.ssh/authorized_keys必须为644,否则可能会出现登录不了的情况。

3、在SecureCRT上通过密钥登录
通过以上的配置,基本按照ssh服务端的默认配置是可以通过密钥进行登录,如果还是不能可以检查下前面的步骤,以及后面的ssh服务端配置的相关选项进行适当调整。
配置SecureCRT通过密钥登录linux服务器:

 

 

把PublicKey认证调整到第一,

 

 

 

 

wKiom1PYuVbSuXCmAAErzLsHvE0945.jpg

 

Properties,设置本地密钥的存放地址,设置好后。就可以直接连上linux服务了

 

wKiom1PYu1rx-hXCAAFQ0nSWHAY906.jpg

 

 

 

 

 

 

 

 

 

4、OpenSSH服务端配置项说明  
OpenSSH的配置通常保存在:/etc/ssh/sshd_config
PermitRootLogin no # 禁止root用户登陆
StrictModes yes # 检查密钥的用户和权限是否正确,默认打开的
AuthorizedKeysFile .ssh/authorized_keys # 验证公钥的存放路径
PubkeyAuthentication yes # 启用公钥认证
PasswordAuthentication no # 禁止密码认证,默认是打开的。

 
 
 
http://tdem.org/cn/node/202

ssh利用public key实现无密码远程登陆

    其实实现标题的描述,对于正常情况下来讲,应该是分分钟的事,可是偏偏linux系统下不正常的情况有太多,只要它一不正常,我就要费好大功夫来解决这个问题。
    先描述下正常的操作过程,然后再在一些关键步骤做一些说明,也省得自己日后忘记。我们假设用workstation来表示用户端,server来表示远端服务器,用户名两端都为user,那么正常的操作过程应该如下:
    workstation端,首先看一下是否存在~/.ssh目录,如果不存在,新建
    mkdir ~/.ssh
    然后生成ssh密钥对
    ssh-keygen -t rsa   (-t代表密钥类型为rsa型)
    一路回车(我没有输入passphrase),然后在~/.ssh中应该会存在两个文件id_rsa以及id_rsa.pub,前者为你的私钥,后者为公钥,私钥是无论如何不能散发出去的。然后新建一个authorized_key2文件
    cat id_rsa.pub>>authorized_key2
    然后用scp将authorized_key2上传到server端user家目录下的.ssh目录中
    scp authorized_keys user@server.com:/home/user/.ssh
    如果server端不存在此目录同样需要新建,然后将authorized_key2重命名为authorized_key即可实现workstation到server端ssh无密码登陆。
    如果你照着上边的做了之后操作一遍你会发现,好像我在骗人,根本无法无密码登陆,还是要输入密码。好了,现在开始把上面步骤中真正关键的部分说出来。
    ssh要求server和workstation的.ssh目录权限除user外任何人不具有读写以及执行权限,所以我们要先把这两个目录权限改好
    chmod 700 .ssh
    然后对于id_rsa这个文件除user外,任何人不具备读写以及执行权限
    chmod 600 id_rsa
    对于其他的文件最好除user之外的用户也不应该具备写权限以及执行权限。
    此时如果尝试ssh登陆,一般情况下即可实现ssh无密码远程登陆,但是对于有些机器,用户更换过几次密钥对之后,还是无法实现无密码登陆,这时需要在server端运行ssh-add命令,但是通常你都会得到下面的提示
    could not open a connection to your authentication agent
    这其实是因为ssh-agent没有运行,这是我们就需要做一些高级操作了,我们需要在/etc/profile.d目录下(其实最好是在自己的家目录下 编辑.bash_profile文件)新建一个shell script来完成ssh-agent的开机自启动,我们新建一个ssh.sh
    !#/bin/bash    ev
    eval $(ssh-agent)
    ssh-add
    保存后重启server机器,这时,你再试试是不是就可以了呢。折腾了这么久终于可以实现ssh无密码远程登陆了。当然,有部分系统要求server端~/目录除user之外的用户同样不能具有写权限,所以,为了保险起见,最好将两端的家目录权限设置为740.
    (如此操作有个坏处,每次登陆后都会产生一个ssh-agent进程,不随退出而关闭,并且配置在/etc/profile.d下全局进行,结果就是不管 用不用秘钥登陆,只要ssh登陆就会产生一个ssh-agent进程。自从上次开机到我发现这个问题大概有20天,总共大概产生了200个左右的ssh- agent进程。开始手动kill,kill了一半之已经腰酸背痛流泪不止了,于是我想肯定有更好一点的kill方式吧,发现果然有个pkill命 令,pkill ssh-agent即全部杀死了,更多的眼泪流了出来。关于这个问题,IBM官网有一个解决办法,需要的可以参考
    有人会好奇问我为什么折腾这么久来实现ssh无密码远程登陆,输个密码又不会把人累死。其实呢,这个问题开始我也是这么想得,毕竟不想浪费太多的时间来折 腾linux的东西,但是后来我发现如果我在server端做了计算之后每次都要记得往自己的机器上面传输实在是意见很麻烦的事情,尤其是有些时候给别人 算好了的数据别人要的时候我在打开了QQ准备发文件的时候才发现数据依然静静地躺在server端。于是我就想,我干脆设置一个计划任务,每个小时让 server端计算目录跟workstation端同步一次,就用rsync这个好用的工具。可是rsync是基于ssh的,如果我不能实现ssh无密码 登陆,那么我就不能保证每个小时两端都会同步数据,因为我要记得输密码啊。所以就有了以上的折腾过程。
    另外,有人会发现即便是这样,ssh登陆的过程依然是无比漫长,我发现了一个可以解决这个问题的方法,当然前提是你用public key来实现无密码登陆。方法是这样的,打开server端ssh的配置文件/etc/ssh/sshd_config,找到下面的部分
    # GSSAPI options

GSSAPIAuthentication no

#GSSAPIAuthentication yes

#GSSAPICleanupCredentials yes

#GSSAPICleanupCredentials yes

#GSSAPIStrictAcceptorCheck yes

#GSSAPIKeyExchange no

    按照我的这个设置设置一下就好了。当然如果还有什么问题,通过ssh的debug选项可以查看问题具体处在哪里,比如
    ssh -v user@server.com (也可以给上三个v,-vvv,v越多,debug给出的信息就越详细)
    当然,如果你的问题还没有解决的话,那我只能告诉你,有问题,找谷歌了。百度在这上面真的不好使。搜索这些问题一般要用英文来搜索,因为国内linux用 户规模还是要小一些,并且没有成熟的问答网站,只有零星的linux门户的文章以及个人博客有所提及,所以建议直接英文搜索谷歌。当然,先汉语搜索,如果 不能解决再英文搜索也不迟。

 
 
http://wiki.yun.qq.com/wiki/%E9%80%9A%E8%BF%87ssh%E5%AF%86%E9%92%A5%E6%96%B9%E5%BC%8F%E7%99%BB%E9%99%86%E5%88%B0Linux%E6%9C%8D%E5%8A%A1%E5%99%A8%EF%BC%88%E6%97%A0%E5%85%AC%E7%BD%91IP%EF%BC%89

通过ssh密钥方式登陆到Linux服务器(无公网IP)

目录

[隐藏]

windows系统使用secureCRT登录

1、配置客户端软件,详细请参考从本地Windows机器登录到Linux云服务器(无公网IP)中的STEP1。

2、按照Windows使用secureCRT登录中介绍的方法配置您登录所需的密钥。
3、在secureCRT中勾选中图中选项
tongguosshmishifangshidenglulinuxfuwuqi-01.png
4、登录您的服务器。
注意:登录选项需要勾选Firewall,选择为您第1步设置的代理名。
tongguosshmishifangshidenglulinuxfuwuqi-02.png

Linux系统登录

1、配置config文件,详细请参考从本地Linux机器登录到Linux云服务器(无公网IP)中的STEP1


2、然后修改/etc/ssh/ssh_config文件,找到ForwardAgent项,并设置为yes

3、登录您的服务器,输入如下命令:

#mkdir ~/.ssh            		 #如果用户主目录下已经有.ssh目录,则忽略本条命令
#cp 您的私钥文件 ~/.ssh/identity    	 #将您的私钥文件拷贝到~/.ssh目录下,并改名为identity
#chmod 600 ~/.ssh/identity               #将您的私钥文件设置权限为600
#eval `ssh-agent`			 #启动ssh-agent
#ssh-add				 #加载私钥
#ssh -l 系统管理员 -A 服务器IP              #对于ubuntu系统管理员为ubuntu;对于redhat,centos,suse用户名为root



http://wiki.qcloud.com/wiki/%E9%80%9A%E8%BF%87ssh%E5%AF%86%E9%92%A5%E6%96%B9%E5%BC%8F%E7%99%BB%E9%99%86%E5%88%B0Linux%E6%9C%8D%E5%8A%A1%E5%99%A8%EF%BC%88%E5%85%AC%E7%BD%91%EF%BC%89


通过ssh密钥方式登陆到Linux服务器(公网)

目录

[隐藏]

1.windows系统下putty使用

使用putty登陆

putty客户端需要先把私钥文件的格式转为ppk格式,如果您尚未完成格式转换,进入移步私钥格式转换教程。如果您已经完成格式转换,请继续配置putty客户端。
进入putty.exe,进入“Auth”配置
sshmiyuedenglu-01.png
点击“Browse”按钮,进入弹窗后进入密钥存储的路径,并选择密钥,点击“打开”,返回配置界面,进入“Session”配置
sshmiyuedenglu-02.png
在Session配置页中,配置服务器的IP,端口,协议信息,在“Saved Sessions”输入框中中输入会话名称(本例为test),再点击“Save”按钮,然后双击会话名称或者点击“Open”按钮发起登录请求。
sshmiyuedenglu-03.png

2.密钥格式转换教程

打开puttygen.exe,点击“Load”,在弹窗中首先进入您存放密钥的路径,然后选择“All File(*.*)”,选择某个私钥(例子中为文件david,david是密钥的名称),点击“打开”。
如果尚未下载puttygen.exe,可以进入http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html 进行下载。
sshmiyuedenglu-04.png
在key comment栏中输入密钥名,输入加密私钥的密码(可选),点击“Save private key”,在弹窗中选择您存放密钥的目录,然后在文件名栏输入“密钥名.ppk”,点击“保存”。
sshmiyuedenglu-05.png

3.Windows使用secureCRT登录

进入腾讯云的云服务器管理页面,进入“SSH密钥管理”子页面,点击您用于登录服务器的密钥查新密钥信息,然后拉选并复制(按ctrl+c)公钥。
sshmiyuedenglu-06.png
将公钥内容粘贴到空白文本中,并保存文本名为密钥名.pub(图中例子为test.pub),将公钥文件保存在私钥文件(本例中私钥名为test)所在的文件夹下。 注意:私钥和公钥要相同的文件名,本例中公钥名为test.pub,那么私钥名必须为test。

打开secureCRT,点击快速连接,然后配置登录主机名称/IP、端口、系统管理员用户名,之后再将登录认证协议按照图中所示进行配置,最后点击 “Properties”按钮,进入公钥配置页面(见下图中右下小图所示)。在公钥配置页面点击图中第5步所指按钮选择公钥文件(test.pub)并点 击“open”按钮,然后点击“ok”按钮确认公钥配置完成。点击第8步所指“Connect”按钮发起登录请求。
注:图中第二步Hostname处填写系统管理员用户名。对于suse、centos、redhat系统,系统管理员的用户名为root;对于ubuntu系统,系统管理员的用户名为ubuntu。
sshmiyuedenglu-08.png
sshmiyuedenglu-09.png

3.Linux系统登录指引

如果您使用centos、redhat、ubuntu等系统,那么使用如下命令进行登录:
#mkdir ~/.ssh                		#如果用户主目录下已经有.ssh目录,则忽略本条命令
#cp 您的私钥文件 ~/.ssh/identity    	#将您的私钥文件拷贝到~/.ssh目录下,并改名为identity
#chmod 600 ~/.ssh/identity   		#将您的私钥文件设置权限为600
#ssh -l 系统管理员 服务器IP  		#对于ubuntu系统管理员为ubuntu;对于redhat,centos,suse用户名为root

由于密钥格式不同,目前suse系统不能直接使用密钥远程登录。

 

http://luoqkk.com/linux-ssh-authorized-keys-login.html

原文地址:http://www.vpser.net/security/linux-ssh-authorized-keys-login.html

SSH密钥登录让Linux VPS/服务器更安全

随着PHP越来越流行,Linux VPS/服务器的使用也越来越多,Linux的安全问题也需要日渐加强,如果你安装过DenyHosts并设置过邮件提醒,你每天可能会受到数封 DenyHosts Report将前来破解SSH密码的IP加入/etc/hosts.deny。

Linux SSH登录有两种:

1、使用密码验证登录

通常VPS或服务器开通后都是直接提供IP和root密码,使用这种方式就是通过密码方式登录。如果密码不够强壮,而且没有安装DenyHosts之类的防止SSH密码破解的软件,那么系统安全将存在很大的隐患。

2、使用密钥验证登录

基于密钥的安全验证必须为用户自己创建一对密钥,并把共有的密钥放在需要访问的服务器上。当需要连接到SSH服务器上时,客户端软件就会向服务器发 出请求,请求使用客户端的密钥进行安全验证。服务器收到请求之后,先在该用户的根目录下寻找共有密钥,然后把它和发送过来的公有密钥进行比较。如果两个密 钥一致,服务器就用公有的密钥加密“质询”,并把它发送给客户端软件(putty,xshell等)。客户端收到质询之后,就可以用本地的私人密钥解密再 把它发送给服务器,这种方式是相当安全的。
一、生成密钥

因为puttygen生成的密钥有问题可能会出现:“Server refused our key”,最好使用XShell生成密钥或者在远程Linux VPS/服务器生成密钥。
1、在Linux远程服务器生成密钥:
登录远程Linux VPS/服务器,执行:

root@vpser:~# ssh-keygen -t rsa //先运行这个命令
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):                   //直接回车
Created directory '/root/.ssh'.
Enter passphrase (empty for no passphrase):                                    //输入密钥密码
Enter same passphrase again:                                                                 //重复密钥密码
Your identification has been saved in /root/.ssh/id_rsa.         //提示公钥和私钥已经存放在/root/.ssh/目录下
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
15:23:a1:41:90:10:05:29:4c:d6:c0:11:61:13:23:dd root@vpser.net
The key's randomart image is:
+--[ RSA 2048]----+
|=&@Bo+o o.o      |
|=o=.E  o . o     |
| .    .   .      |
|         .       |
|        S        |
|                 |
|                 |
|                 |
|                 |
+-----------------+
root@vpser:~#

将/root/.ssh/下面的id_rsa和id_rsd.pub妥善保存。
2、使用XShell生成密钥

Xshell是一款Windows下面功能强大的SSH客户端,能够按分类保存N多会话、支持Tab、支持多密钥管理等等,管理比较多的VPS/服务器使用XShell算是比较方便的,推荐使用。

下载XShell,安装,运行XShell,点击菜单:Tool ->User Key Generation Wizard,出现如下提示:




点击Save as file将密钥保存为id_rsa.pub。
二、将密钥添加到远程Linux服务器

1、用winscp,将id_rsa.pub文件上传到/root/.ssh/下面(如果没有则创建此目录),并重命名 为:authorized_keys(如果是在Linux服务器上生成的密钥直接执行:mv /root/.ssh/id_rsa.pub /root/.ssh/authorized_keys),再执行:chmod 600 /root/.ssh/authorized_keys 修改权限。

2、修改/etc/ssh/sshd_config 文件,将RSAAuthentication 和 PubkeyAuthentication 后面的值都改成yes ,保存。

3、重启sshd服务,Debian/Ubuntu执行/etc/init.d/ssh restart ;CentOS执行:/etc/init.d/sshd restart。
三、客户端测试使用密钥登录
1、使用putty登录

putty使用的私钥文件和Linux服务器或XShell的私钥格式不同,如果使用putty的话,需要将Linux主机上生成的id_rsa文 件下载的本地。运行putty压缩包里面的puttygen.exe,选择Conversions->Import key选择私钥文件id_rsa,输入密钥文件的密码,会出现如下界面:

点击“Save Private Key”,将私钥保存为id_rsa.ppk

运行putty,在Host Name填写:root@主机名或ip



如果设置了密钥密码,出现:Passphrase for key “imported-openssh-key”时输入密钥密码。

如果设置没问题就会登录成功,出现用户提示符。
2、XShell登录

运行XShell,选择菜单File->New,按如下提示填写:


打开创建好的Session


如果设置没问题就会登录成功,出现用户提示符。
3、Linux客户端登录测试

在Linux客户端执行:chmod 600 /root/id_rsa 再执行:ssh root@www.vpser.net -i /root/id_rsa /root/id_rsa为私钥文件,第一次链接可能会提示确认,输入yes即可,再按提示输入密钥密码,没有问题就会出现用户提示符。
四、修改远程Linux服务器sshd服务配置
1、修改/etc/ssh/sshd_config 文件

将PasswordAuthentication yes 修改成 PasswordAuthentication no
2、重启sshd服务

Debian/Ubuntu执行/etc/init.d/ssh restart ;CentOS执行:/etc/init.d/sshd restart。

ok,设置完成。

再提醒一下一定要保存好Putty私钥文件id_rsa.ppk或Linux服务器下载下来的id_rsa私钥文件。

 

 

http://www.doudouxitong.com/guzhang/linux/2014/0402/868.html

当我们同一个人管理多台的linux服务器的时候,如果每次进入服务器都要输入密码那么是以及那很麻烦,很浪费时间效率的事情,这里我们就有了一种 代理的方式ssh-agent,ssh-agent其实就是一个密钥的管理者,也可以理解为管家,我们将钥匙交给管家来保管,每次开门只要管家帮我们开输 入进门密码就OK了,这不是很方便啊。

  还记得之前ssh密钥登录时候的情景吗:

  

 

  这里是要输入产生密钥时的密码的,但是如果我们将密钥交给管家来管理,给管家一个密码,那么我们每次进门的时候让管家来帮我们开门:

  

 

  这是肿么了,不能和管家建立连接,我们要先启动ssh-agent才能添加,管家都还没上班,怎么让他保管钥匙,怎么让他开门输密码呢:

  

 

  当然这个代理也不是永久的,当我们退出之后重新登录进来,这个代理就消失了,我们必须要重新设置一次代理,经常使用windows的我们知道可以设置开机启动项,我想足够聪明的你也知道这里该怎么办吧。

  我们也可以用secureCRT来生成密钥,将公钥传给服务器的某个用户,然后用密钥登录的方式来进行登录,这个方法在网上可以找到很多的教程不用多 解释。这里我遇到一个问题,我觉得也可以将服务器生成一对密钥中的私钥传过来,然后用secureCRT来指定这个私钥,进行密钥登录,不知道这种想法对 不对。

  密钥登录是很安全方便,那么到底密钥登录是怎样一个过程呢,这也是我纠结了许久的问题,我们的私钥和服务器上的公钥是如何实现匹配的呢,最初我的想法 是这样的,服务器用我的公钥加密一条消息,我通过私钥解密,然后用服务器的公钥加密发给服务器,服务器接收到了用它的私钥解密,如果确实是服务器发的消 息,则匹配成功。

 

  ssh的登录过程分为5个阶段:

  1、版本号协商阶段

  2、密钥和算法协商阶段

  3、认证阶段

  4、会话请求阶段

  5、会话交互阶段

 

  1、版本号协商阶段

  服务端打开端口22,等待客户连接。

  客户端向服务端发起TCP连接,连接建立后,服务端向客户端发送第一个报文,包括版本标志字符串,格式为“协议版本号 次协议版本号 软件版本号”。

  客户端收到报文后,解析协议版本号,如果服务端的协议版本号比自己的低,且客户端能支持服务端的低版本,就使用服务端的协议号,否则使用自己的协议版本号。

  客户端回复服务端一个报文,包含了客户端决定使用的协议版本号。

  服务端比较客户端发过来的版本号,决定是否能同客户端交互。

  如果协商成功,就进入密钥和算法协商阶段。否则服务端断开TCP连接。

 

  2、密钥和算法协商阶段

  服务端和客户端分别发送算法协商报文给对方,报文中包含自己支持的公钥算法列表、加密算法列表、消息验证码算法列表、压缩算法列表等。

  服务端和客户端根据对方和自己支持的算法得出最终使用的算法。

  服务端和客户端利用DH交换算法、主机密钥对等参数,生成会话密钥和会话ID。

  c公 客户端公钥

  c密 客户端密钥

  s公 服务端公钥

  s密 服务端密钥

  在版本号协商阶段完成后:

  服务端将 s公 发送给客户端。

  服务端生成会话ID ,设为 id ,发送给客户端。

  客户端生成会话密钥,设为 key ,并计算 res = id 异或 key。

  客户端将 res 用 s公 进行加密,将结果发送给服务端。

  服务端用 s密 进行解密,得到 res。

  服务器计算 res 异或 id,得到 key。

  至此服务端和客户端都知道了会话密钥和会话ID,以后的数据传输都使用会话密钥进行加密和解密。

 

  3、认证阶段

  基于账号和口令的验证方式:

  客户端使用密钥和算法协商阶段生成的会话密钥加密账号、认证方法、口令,将结果发送给服务器。

  服务端使用获得的会话密钥解密报文,得到账号和口令。

  服务端对这个账号和口令进行判断,如果失败,向客户端发送认证失败报文,其中包含了可以再次认证的方法列表。

  客户端从认证方法列表中选择一种方法进行再次认证。

  这个过程反复进行,直到认证成功或者认证次数达到上限,服务端关闭本次TCP连接。

  基于公钥和私钥的验证方式:

  使用ssh-keygen程序生成公钥 id_dsa.pub 和私钥 id_dsa,一般是在客户端上生成,然后把 id_dsa.pub 通过某种方式发送给服务端。

  服务端放在将要远程登录过来的那个账号的目录的.ssh目录下面。

  客户端使用密钥和算法协商阶段生成的会话密钥加密账号、认证方法、id_dsa.pub,将结果发送给服务端。

  服务端使用会话密钥解密报文,得到账号、id_dsa.pub。 服务端在这个账号的目录的.ssh目录下找对应的公钥,如果没有找到,发送失败消息给客户端,如果找到,比较客户发送过来的这个公钥和找到的公钥,如果内 容相同,服务端生成一个随机的字符串,简称“质询”,然后使用找到的公钥加密这个质询,然后使用会话密钥再次加密。

  服务端把这个双重加密的数据发送给客户端。

  客户端使用会话密钥解密报文,然后使用id_dsa再次解密数据,得到质询。

  客户端使用会话密钥加密质询,发送给服务端。

  服务端使用会话密钥解密报文,得到质询,判断是不是自己生成的那个质询,如果不相同,发送失败消息给客户端,如果相同,认证通过。

 

 

posted @ 2014-10-09 17:14  陳聽溪  阅读(22682)  评论(0)    收藏  举报