搭架SSH服务器学习笔记

1. 背景:

         安全外壳协议(Secure Shell,SSH)是目前应用较多的一个网络安全协议。它为网络上传输的数据提供机密性、完整性、认证性等安全服务。

最近在研究git服务器,要使用ssh协议,需要搭架ssh服务器,这是第一次搭架,做下笔记,以供参考,以下是我的应用环境:

C/S

操作系统

软件

IP地址

SSH服务端

Linux(debian)

OpenSSH

192.168.1.101

SSH客户端

Windows XP

Copssh

192.168.1.100

 

ssh客户端有很多选择,可以到这里看看:

http://en.wikipedia.org/wiki/Comparison_of_SSH_clients

2. linux上安装OpenSSH

◆如果要下载源码安装,可以到以下几个链接下载:

官网:http://www.openssh.com/

下载:http://www.openssh.com/openbsd.html

◆我选择直接从软件包安装:

#apt-get install ssh

以上命令安装同时安装了openssh-serveropenssh-client,你也可以有选择性的安装:

#apt-get install openssh-server

#apt-get install openssh-client

安装完后应该会自动运行ssh服务,可以通过以下指令确认:

#ps aux|grep ssh

 

3. Windows XP上安装CopSSH

官网:https://www.itefix.no/i2/copssh

安装过程很简单,一直“下一步”即可。

4. SSH登陆

         SSH提供了两种认证方式:口令认证和密钥认证。在Windows XP安装完CopSSH后,在开始菜单 > CopSSH > 03. Start a Unix BASH Shell启动Shell窗口,在这里就可以使用ssh命令。

4.1. 口令认证

用服务器上的root身份登陆:

搭架SSH服务器学习笔记_第1张图片

第一次登陆时,会提示无法创建/home/Administrator/.ssh目录,你可以用以下命令创建该目录:

$ mkdir –p  /home/Administrator/.ssh

同时,你第一次登录某一个远程主机时,会出现没有找到远程主机密钥的提示信息。输入"yes"后,系统会将远程主机的密钥加入到你的主目录下的/home/Administrator/.ssh/known_hosts文件中。以后登录就不会再提示了,直接输入服务器账号root的密码即可登录。

         登陆后,你就可以远程操作服务器了,要登出,用exit或者logout命令。

        要保证.ssh和authorized_keys都只有用户自己有写权限,否则验证无效。(今天就是遇到这个问题,找了好久问题所在),其实仔细想想,这样做是为了不会出现系统漏洞。

4.2. 密钥认证

基于口令的认证,需要在用户每次登录的时候都输入用户名和口令,显得比较麻烦。而基于公共密钥的认证,只需要在第一次输入密钥口令,就可以不需要再次输入,一次分发密钥后,验证将由程序自动进行,且安全性比基于口令方式更强。

4.2.1. 原理

SSH双方,通过相应帐号主目录下的.ssh目录中的客户端密钥对id_rsa、id_rsa.pub文件和服务端authorized_keys文件中密钥进行验证。

id_rsa

自己的rsa私钥

id_rsa_pub

自己的rsa公钥

authorized_keys

存放rsa客户端的公钥

4.2.2. 通信过程

◆客户端向ssh服务器发出连接请求,请求用密匙进行安全验证,该请求包含请求的帐号和自己的公钥。

◆ssh服务器收到请求后,先在服务器的用户目录下对应帐号目录中寻找你的公用密钥(如/root/.ssh/authorized_keys文件中),如果找到的公钥与客户端发来的公钥一致,则开始进行下一步“质询”。

◆服务器用该公钥加密“质询”(challenge)信息,并发送绐客户端。

◆客户端收到加密的质询信息后,用自己的密钥对其解密,并将解密后的信息发送回服务器。

◆服务器验证客户端返回的质询信息正确后,验证结束,双方开始通信。

4.2.3. 配置方法

在客户端用以下指令生成密钥对文件(补充:后来发现最好是用ssh-keygen -t rsa,有次我在CentOS系统上运行ssh-keygen产生的密钥对就不是rsa的):

搭架SSH服务器学习笔记_第2张图片

         之后将生成的id_rsa.pub文件内容附加到服务器对应帐号下的authorized_keys文件末尾即可,如果没有该文件则新建一个,如:/root/.ssh/authorized_keys。有以下两种操作方法:

◆远程操作

$ ssh-copy-id -i  ~/.ssh/id_rsa.pub  [email protected]

在CopSSH的Shell中没法用ssh-copy-i命令,如果客户端是安装在linux就可以用该命令了。

◆文件拷贝到服务器上操作

         先在客户端用scp命令将文件拷贝到远程服务器:

         然后登陆到服务器,在服务器上操作,将文件id_rsa.pub追加到authorized_keys文件中。操作如下:

搭架SSH服务器学习笔记_第3张图片

4.2.4. 公钥认证无需输入口令

按以上任一方法配置,以后登陆就无需输入密码,如下图所示:

 

 

4.3. 设置主机别名

实际应用中,可能同时需要多套公钥/私钥对。在使用ssh-keygen命令时需要通过-f参数指定不同的私钥名称。用法如下:

$ ssh-keygen -f ~/.ssh/<filename>

指定有意义的<filename>名称,命令执行后,会在~/.ssh目录下创建指定的公钥/私钥对:文件<filename>是私钥,文件<filename.pub>是公钥。

         将新生的公钥追加到服务器主机登陆用户主名录下的.ssh/authorized_keys文件中,就可以使用新创建的公钥建立到远程主机<server><user>账户的无口令登陆。

         现在客服端存在多个公钥/私钥对,那么当执行下面的ssh登陆指令时,用到的是哪个公钥呢?

$ ssh <user>@<server>

         当然是默认公钥~/.ssh/id_rsa.pub。那么如何用新建的公钥连接server呢?

         SSH的客户端配置文件~/.ssh/config可以通过创建主机别名,在连接主机时选择使用特定的公钥。例如~/.ssh/config文件中的下列配置:

host hr

  user root

  hostname 192.168.1.101

  port 22

  identityfile ~/.ssh/id_rsa

 

host hj

  user root

  hostname 192.168.1.101

  port 22

  identityfile ~/.ssh/jiajia

         可以使用下面的SSH登陆命令,

$ ssh hr    // 相当于用私钥id_rsa文件登陆[email protected]服务器

$ ssh hj    // 相当于用私钥jiajia文件登陆[email protected]服务器

你可能感兴趣的:(搭架SSH服务器学习笔记)