SSH远程连接服务器

1、远程连接服务器

远程连接服务器对于管理员来说,是一个很有用的操作。它使得对服务器的管理更为方便。不过方便归方便,但开放的让全世界都可以尝试连接你的主机并不是什么好事,因为可能会有安全性问题。


1.1、什么是远程连接服务器

远程连接服务器通过文字或图形接口的方式来远程登录系统,让你在远程的终端前面登录Linux主机已取得可操作主机的接口(Shell),而登陆后的操作感觉上就像坐在系统前面一样!

用 SSH/Telnet/VNC 等方式取得的文字或者图形 Shell 能够进行很多系统管理的任务,与单纯的 FTP 能进行的工作当然不同。

远程连接服务器的功能:

1、分享 Unix-Like 主机的运算能力;

2、服务器类型(Server),有限度的开放连接;

3、工作站类型(Workstation),只对内网开放;

1.2、有哪些可供登录的类型

文字接口和图形接口,明文传输和加密传输

文字接口明文传输:Telnet、RSH,目前已少用;

文字接口加密:SSH为主;

图形接口:XDMCP、VNC、XRDP等


2、SSH服务器

SSH(Secure Shell Protocol),它可以通过数据包加密技术将等待传输的数据包加密后在传输到网络上,因此数据信息就比较安全。

在默认状态下,SSH协议本身提供两个服务器功能。

一个是类似 Telnet 的远程连接使用 Shell 的服务器,即俗称的SSH;

另一个就是类似 FTP 服务的 Sftp-Server,提供更安全的 FTP 服务

2.1、连接加密技术

目前常见的数据包加密技术通常是所谓的  “非对称密钥系统” 来处理的。主要是通过两把不一样的公钥(Public)和私钥(Private)来进行加密与解密的过程。由于这两把钥匙的作用是提供数据加解密的,所以在同一个方向的连接中,这把钥匙当然是需要成对的。

公钥(Public Key):提供给远程主机进行数据加密行为,也就是说大家都能取得你的公钥来将数据加密;

私钥(Private Key):远程主机使用你的公钥加密的数据,在本地端就只能使用来进行解密。由于私钥很重要,因此私钥是不能够外流的,只能保护在自己的主机上。

由于每台主机都应该有自己的密钥(公钥与私钥),且公钥用来加密而私钥用来解密,其中私钥不可外流,但因为网络是双向的,所以,每个人应该都要有对方的“公钥”才对!

公钥和私钥


公钥私钥的产生
1、服务器建立公钥文件;

2、客户端主动连接要求;

3、服务器传送公钥给客户端;

4、客户端记录/对比服务器的公钥数据及计算自己的公私钥;(客户端的密钥是随机运算产生于本次连接当中的,所以这次的连接与下次的连接密钥可能会不一样啦!此外客户端的用户主目录下:~/.ssh/know_hosts 中会记录曾经连接过的主机的 Public Key,用于确认·我们自己已经连接上正确的服务器。如果想要产生新的密钥则 rm  /etc/ssh/ssh_host*

5、返回客户端的公钥数据到服务器;

6、服务器接受私钥开始双向加解密。

2.2、启动SSH服务

启动及查看ssh服务

SSHD可以同时提供Shell和FTP,而且都是架构在 Port 22 上面的

2.3、SSH客户端连接程序 —— Linux用户

2.3.1、SSH:直接登录远程主机的指令

ssh用法

如果不填写账号的话,那么会以本地端计算机的账号来尝试登陆远程。

ssh  192.168.1.1

ssh  hahaha@192.168.1.1

ssh  -f  hahaha@192.168.1.1  shutdown -h  now

2.3.2、服务器公钥记录文件:~/.ssh/known_hosts

当你登录远程服务器时,本机会主动接收到服务器的Public Key去比对 ~/.ssh/known_hosts有无相关公钥。

2.3.3、模拟FTP的文件传输方式:SFTP

SSH是登录远程服务器进行工作,那如果你只是想要从远程服务器下载或者上传文件呢?那就不使用SSH啦,而必须使用SFTP或SCP。这两个指令都是使用SSH的通道(port :22),只是模拟成FTP与复制的操作而已。

sftp  student@192.168.1.1

SFTP用法

2.3.4、文件异地直接复制:SCP

通常使用SFTP是因为可能不知道服务器上面已存在的文件名信息,如果已经知道服务器上的文件名,那么最简单快捷的方式是使用SCP这个命令。

scp用法

scp  /home/aaa/test.txt  zhang@192.168.1.1:/home/zhang

scp  zhang@192.168.1.1:/home/zhang/AAA.txt  /home/aaa/


3、SSHD服务器详细配置

基本上,所有的SSHD服务器的详细配置都放置在 /etc/ssh/sshd_config 配置文件中。同时请注意,配置文件里只要未被修改的值即为默认值,你可以依据它来修改。建议取消root登录并将SSH版本设定为2.

vim  /etc/ssh/sshd_config

将远程连接禁止root登录:

#PermitRootLogin  yes    改为    PermitRootLogin    no;

#Protocol 2

SSH限制被尝试次数:

MaxAuthTries  6;

在限定的次数里面密码认证失败的话将会被强制断开连接。

关闭UseDNS加速SSH登录:

经常登录SSH的朋友可以感觉出,每次登录SSH时总是要停顿一下才能连接上,这是因为OpenSSH服务器有一个DNS查找选项UseDNS在默认情况下是打开的;

UseDNS选项打开的状态下,当客户端试图登录SSH服务器时,服务器端先根据客户端的IP地址进行DNS PTR反向查询客户端主机名,然后根据查询出的客户端主机名进行DNS正向A记录查询,验证与其原始IP地址是否一致,这是防止客户端欺骗的一种措施,但一般我们的IP不会有PTR记录,打开这个选项不过是在白白浪费时间而已,不如将其关闭。

UseDNS no;

SSH限制IP登录几种方法:

1、修改 etc/hosts.allow 和 etc/hosts.deny 文件;

2、修改 /etc/ssh/sshd_config 文件,加入 Allowusers:用户名@IP(只允许某用户从哪个Ip登录)。

 Allowusers *@192.168.1.111 

PermissionRootLogin no

#这两者可以保证只能从你允许的IP登录你的服务器;


4、制作不用密码可立即登录的SSH用户

利用Key不输入密码远程连接主机,具体流程

1、客户端建立两把钥匙:利用命令为 ssh-keygen;

2、客户端放置好私钥文件:将 Private Key 放在用户主目录内的 .ssh/ 里面即可,“.ssh”文件夹权限为700,私钥权限为600且属于用户自己,否则在未来密钥对比的过程中将出现问题。

3、将公钥放置到服务器端中:将 Public Key 放置在你想要用来登录的那个用户的主目录内的 .ssh/authorized_keys文件里,也可以用追加的方式写入。

ssh-keygen  [ -t  rsa | dsa ],之后会生成公钥和私钥;

生成的公私钥

将公钥上传到需要远程连接的服务器上:

scp  ~/.ssh/id_rsa.pub  zhang@192.168.203.129:~;

cat  id_rsa.pub  >> .ssh/authorized_keys;将公钥写入

.ssh 目录的权限是700,authorized_keys权限是644

步骤关键:

Client必须制作出Public和Private这两把Key,且Private Key需要放到 ~/.ssh/ 内;

Server必须要有Public Key,且放置到用户主目录下的 ~/.ssh/authorized_keys,同时目录的权限(.ssh)必须是700而文件权限必须是644,同时文件的属主和属组都必须与该账号吻合才行。

当你还想要登录其他远程主机时,只要将你的Public Key(id_rsa.pub)文件copy到其他主机上去,并且将内容添加到 ~/.ssh/authorized_keys中即可。


5、简易安全设置

SSHD 所谓的安全其实指的是SSHD的数据是加密过的,所以它的数据在Internet上面传递时是比较安全的。至于SSHD这个服务本身就不是那样安全了。所以如果要将SSHD对Internet开放可登录的权限的话,那么,就尽量局限在几个小范围内的IP或主机名(如你们公司的出口IP),这很重要。

1、服务器软件本身的设置强化:/etc/ssh/sshd_config,禁止root登录,禁止某个用户登录,禁止某个用户组登录;

2、/etc/hosts.allow 和 /etc/hosts.deny

hosts.allow--->sshd :127.0.0.1 192.168.0.0/255.255.0.0

hosts.deny--->sshd:ALL

3、iptables数据包过滤防火墙


6、SSH服务器的高级应用

6.1、在非标准端口启动SSH(默认端口:22)

vi  /etc/ssh/sshd_config

# Port 22(这是默认信息)----> Port 23(修改为23端口,但一定要注意,不要将端口开在某些周知的端口上,如80那些)

或者两端口共存,即sshd监听这两个端口:

Port  22

Port  23

非标准端口连接:

ssh  -p  23  zhang@192.168.209.129

6.2、以 rsync 进行同步镜像备份

rsync 是一个相当棒的异地备份系统的指令,可以达到类似镜像(mirror)的功能

rsync 第一次备份的时候需要花费比较长的时间,因为首次要备份所有的文件。但是再次备份文件的时候,仅会复制有差异的数据。这个很重要的哈!

因为 rsync  是通过 SSH 来传输数据的,所以你可以针对 某个用户制作出免密码登录的SSH密钥!如此一来,往后异地备份系统就能够自动地以 crontab 来进行备份了。

rsync  的三种传输方式:

1、在本机上直接运行,用法几乎与 cp 一模一样,例如:

rsync  -av  /etc  /tmp  将/etc/ 的数据备份到 /tmp/etc 内

2、通过 rsh 或 ssh 的信道在Server / Client 之间进行传输数据,例如:

rsync -avz user@ip:/test /test #先做无秘钥就可直接使用了

#rsync  -av  -e  ssh  user@ip:/etc  /tmp  将远程Server的/etc 数据备份到本地 /tmp/etc

3、直接通过 rsync  提供的服务(daemon)来传输,此时 rsync  主机需要启动 873 Port

你必须要在Server端启动 rsync,看 /etc/xinetd.d/rsync;

你必须编辑 /etc/rsyncd.conf 配置文件;

你必须设置定义Client端连接的密码数据;

在 Client端可以利用: rsync  -av  user@hostname::/dir/path  /local/path  注意是两个冒号


rsync使用方法


rsync命令举例

6.3、通过SSH通道加密原本无加密的服务

透过本地端的 ssh 加密联机到远程的服务器示意图

重点回顾:

远程连接服务器可以让用户在任何一台计算机登录主机,以便使用主机的资源来管理与维护主机;

Telnet与RSH都是以明文方式传输数据,当数据在Internet上面传输时较不安全;

SSH由于使用密钥系统,因此数据在Internet上传输时时加密过的,所以比较安全;

但SSH还是属于比较危险的服务,请不要对整个Internet开放SSH的可登录权限,可利用iptables 规范可登录的范围;

SSH的Public Key 放在服务器端,而Private Key 放在Client端;

使用SSH时,尽量使用类似E-mail的方式来登录,即:ssh  username@hostname;

Client端可以比对Server传来的Public Key的一致性,利用的文件为 ~user/.ssh/known_hosts;

SSH的Client端软件提供SSH、SCP、SFTP等程序;

制作不需要密码的SSH账号时,可利用ssh-keygen  -t  rsa 来生成Public Key和Private Key;

上述指令所生成的Public Key必须要上传到Server的 ~user/.ssh/authorized_keys;

rsync  可通过SSH 的服通道或 rsync  --daemon 的方式来连接传输,其主要功能可以通过类似镜像备份来仅备份新的数据,因此传输数据相当快。

推荐阅读更多精彩内容