一、telnet

1、telnet简介

   以前,很少有人买得起计算机,更甭说买功能强大的计算机了。所以那时的人采用一种叫做Telnet的方式来访问Internet:也就是把自己的低性能计算机连接到远程性能好的大型计算机上,一旦连接上,他们的计算机就仿佛是这些远程大型计算机上的一个终端,自己就仿佛坐在远程大型机的屏幕前一样输入命令,运行大机器中的程序。人们把这种将自己的电脑连接到远程计算机的操作方式叫做“登录”,称这种登录的技术为Telnet(远程登录)。

  

2、Telnet的工作原理

   当你用Telnet登录进入远程计算机系统时,你事实上启动了两个程序,一个叫Telnet客户程序,它运行在你的本地机上,另一个叫Telnet服务器程序,它运行在你要登录的远程计算机上,本地机上的客户程序要完成如下功能:

1) 建立与服务器的TCP联接

2) 从键盘上接收你输入的字符

3) 把你输入的字符串变成标准格式并送给远程服务器

4) 从远程服务器接收输出的信息

5) 把该信息显示在你的屏幕上

   远程计算机的“服务”程序监听在tcp 23端口,一接到你的请求,它马上活跃起来,并完成如下功能:

1) 通知你的计算机,远程计算机已经准备好了

2) 等候你输入命令

3) 对你的命令作出反应(如显示目录内容,或执行某个程序等)。

4) 把执行命令的结果送回给你的计算机

5) 重新等候你的命令


3、telnet的使用

安装telnet服务器端和客户端:

[root@Node4 ~]# yum install telnet telnetserver    #安装telnet客户端和服务端程序
[root@Node4 ~]# rpm -ql telnet-server
/etc/xinetd.d/telnet                    #telnet是由超级守护进程管理的服务                 
/usr/sbin/in.telnetd
/usr/share/man/man5/issue.net.5.gz
/usr/share/man/man8/in.telnetd.8.gz
/usr/share/man/man8/telnetd.8.gz
[root@Node4 ~]# rpm -ql telnet
/usr/bin/telnet
/usr/share/man/man1/telnet.1.gz

启动telnet-server:

[root@Node4 ~]# service xinetd start

[root@Node4 ~]# chkconfig telnet on

使用客户端telnet:

     telnet [-l user] host-name [port]

[root@Note3 ~]# telnet 192.168.10.4
Trying 192.168.10.4...
Connected to 192.168.10.4.
Escape character is '^]'.
CentOS release 6.5 (Final)
Kernel 2.6.32-431.el6.x86_64 on an x86_64
login: root                                 #telnet默认禁止root远程登录
Password: 
Login incorrect

login: anyfish                              #要使用远程主机上的用户帐号和密码登录
Password: 
Login incorrect

login: xj
Password: 
Last login: Sat Jan  7 17:33:50 from Node3

[xj@Node4 ~]$

总结:

   Telnet不是一种安全通信协议,因为它并不使用任何安全机制,通过网络/互联网传输明文格式的数据,包括密码,所以谁都能嗅探数据包,获得这个重要信息。

  Telnet中没有使用任何验证策略及数据加密方法,因而带来了巨大的安全威胁,这就是为什么telnet不再用于通过公共网络访问网络设备和服务器。

   telnet的最佳用途就是检查远程主机上的端口是否启用

比如说,如果我们想要检查远程服务器上22,23端口是否启用 ,可以这么做:

[root@Node4 ~]# telnet 192.168.10.3 22  #此时不需要远程主机开启了telnet服务
Trying 192.168.10.3...
Connected to 192.168.10.3.     #已连接
Escape character is '^]'.
SSH-2.0-OpenSSH_5.3
                   #此时阻塞在这里,是等待我们输入命令,就表示22号端口开启了,远程主机有服务监听在此端口,如果输入的命令不符合对方服务的协议就会被强制退出
Protocol mismatch.
Connection closed by foreign host.
[root@Node4 ~]# 
[root@Node4 ~]# telnet 192.168.10.3 23    #如果是没监听的端口,会明确的拒绝
Trying 192.168.10.3...
telnet: connect to address 192.168.10.3: Connection refused
[root@Node4 ~]#


二、openssh

1、ssh简介

ssh:Secure Shell 

  默认监听在tcp协议的22号端口

  现在ssh是通过互联网访问网络设备和服务器的主要协议

  SSH是一种非常安全的协议,因为它共享并发送经过加密的信息,从而为通过互联网等不安全的网络访问的数据提供了机密性和安全性。

  SSH还可以使用公钥用于对访问服务器的用户验证身份  

  通过Telnet或SSH访问服务器的知名工具则有Putty、Xshell和Secure CRT。它们还用于访问网络设备,如路由器和交换机。


ssh有两个版本:ssh v1,ssh v2

  由于ssh v1是基于CRC-32做MAC,因此不安全,不建议使用

  ssh v2基于双方主机协商选择最安全的MAC实现机制,建议使用

     加密机制及MAC机制是双方协商选定

     基于DH实现密钥交换,基于RSA或DSA实现身份认证  

     客户通过检查服务端的主机密钥来判断是否与其进一步通信    


2、openssh

[root@Note3 ~]# rpm -qa|grep openssh       #系统上已默认安装了openssh的客户端和服务器端
openssh-server-5.3p1-118.1.el6_8.x86_64    #服务端
openssh-clients-5.3p1-118.1.el6_8.x86_64   #客户端
openssh-5.3p1-118.1.el6_8.x86_64           #通用组件
openssh-askpass-5.3p1-118.1.el6_8.x86_64
[root@Note3 ~]# rpm -ql openssh-clients 
/etc/ssh/ssh_config    #客户端程序的配置文件
/usr/bin/.ssh.hmac
/usr/bin/scp
/usr/bin/sftp
/usr/bin/slogin
/usr/bin/ssh           #客户端工具
/usr/bin/ssh-add       #添加密钥的工具
/usr/bin/ssh-agent
/usr/bin/ssh-copy-id
/usr/bin/ssh-keyscan
/usr/libexec/openssh/ssh-pkcs11-helper
/usr/share/man/man1/scp.1.gz

[root@Note3 ~]# rpm -ql openssh-server
/etc/pam.d/ssh-keycat
/etc/pam.d/sshd
/etc/rc.d/init.d/sshd        #服务脚本
/etc/ssh/sshd_config         #服务程序的配置文件
/etc/sysconfig/sshd          #服务脚本的配置文件
/usr/libexec/openssh/sftp-server
/usr/libexec/openssh/ssh-keycat
/usr/sbin/.sshd.hmac
/usr/sbin/sshd
/usr/share/doc/openssh-server-5.3p1

3、openssh客户端组件

 1)ssh

     ssh [user@] hostname [command]

 -l 小写字母l也可以指定用户名

 -p 指定端口,默认22

 -o port=22 也可以指定使用的端口

[root@Note3 ~]# ssh node4         #主机名不区分大小写,不指定用户则默认使用当前主机的用户登录远程主机,当然该远程主机必须有该用户才行,使用远程主机不存在的用户登录时,会一直提示你密码错误
The authenticity of host 'node4 (192.168.10.4)' can't be established.
RSA key fingerprint is c2:00:8e:68:4c:f1:65:a6:00:14:c0:7a:49:1b:fc:2b.
Are you sure you want to continue connecting (yes/no)? yes   
 #询问是否确认连接,输入yes的话会将对方主机公钥记录在~/.ssh/known_hosts文件中,no就退出,不连接
Warning: Permanently added 'node4' (RSA) to the list of known hosts.
root@node4's password: 
Last login: Sat Jan  7 19:52:32 2017 from 192.168.10.3

[root@Node4 ~]# hostname
Node4
[root@Node4 ~]# logout              #使用logout或exit退出
Connection to node4 closed.

[root@Note3 ~]# ssh 192.168.10.4      
[email protected]'s password: 
Last login: Sat Jan  7 19:52:12 2017 from 192.168.10.3

[root@Node4 ~]# hostname
Node4
[root@Node4 ~]# exit
logout
Connection to 192.168.10.4 closed.

[root@Note3 ~]# ssh node4 hostname -I     #后面接命令,运行命令并将结果返回就退出
root@node4's password: 
192.168.10.4 172.16.11.190

ssh认证机制:

     基于口令:

     基于密钥:

       客户端在本地生成一对密钥,将客户端的公钥复制到要登录的用户的家目录下.ssh中的一个名为authorized_keys或authorized_key2文件中


配置基于密钥认证的过程:

 1)生成密钥对儿

    ssh-keygen [-t rsa]   #默认就是使用rsa算法

[root@Note3 ~]# ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):     #指定私钥存放路径,默认私钥保存为:~/.ssh/id_rsa,公钥:~/.ssh/id_rsa.pub
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:
42:f1:b7:bc:c2:b4:39:fe:32:13:53:87:85:1c:d2:a1 root@Note3
The key's randomart p_w_picpath is:
+--[ RSA 2048]----+
|      . .oo+     |
|       o o+ .    |
|      . E .o     |
|     .   oo..    |
|      . S.o.     |
|       +oo .     |
|        *o.      |
|       .+o       |
|        .=.      |
+-----------------+

[root@Note3 ~]# ls .ssh/
id_rsa       id_rsa.pub   known_hosts     #known_hosts文件中记录了已识别主机

 2)复制密钥至远程主机

    ssh-copy-id [-i /path/to/pubkey_file] USERNAME@HOST  

      公钥不是在默认位置就用-i选项指定公钥,注意公钥文件名一定要以.pub结尾要不然会报错使用哪个用户复制的,就会把公钥保存在远程主机相应用户~/.ssh/authorized_keys文件中,就可以免口令登录了。

[root@Note3 ~]# ssh-copy-id 192.168.10.4
The authenticity of host '192.168.10.4 (192.168.10.4)' can't be established.
RSA key fingerprint is c2:00:8e:68:4c:f1:65:a6:00:14:c0:7a:49:1b:fc:2b.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.10.4' (RSA) to the list of known hosts.
[email protected]'s password: 
Now try logging into the machine, with "ssh '192.168.10.4'", and check in:

  .ssh/authorized_keys

to make sure we haven't added extra keys that you weren't expecting.

[root@Note3 ~]# ssh 192.168.10.4        #就可以直接登录了,不用输入用户密码
Last login: Sat Jan  7 20:02:18 2017 from 192.168.10.3

在192.168.10.4上查看:

[root@Node4 ~]# ls .ssh/       #在远程主机上已经有192.168.10.3主机使用root用户登录使用公钥了,但其它主机或用户仍然需要认证密码
authorized_keys  known_hosts
[root@Node4 ~]# cat .ssh/authorized_keys 
ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAvOtQXdy9YAEZX0p2bn/+jLiczegpTWrJ+wl/6aAsE5PRZAI961xyP9TeqMI+86YILQWSzHnoU50bbj9iLcfyx+nYfSOr9QpNTVXKzXf2Fvy/Rcp7O1BaqfYVIM5hVIZzyR57PYSeKrC1o6RHPxNUhm0b4bTHUdeMmLDoiWvK2P2vPsQmW7qxVx6R19uYET/+hSUQrdwbsIuRu+5nvttq22t/SnKdngw9jfICb3msND4DzX1B4+xjVFgeb6vF5cjBhG00Pnt2R9KYDufJ8zHfpvfEbOuuBnLH6QtGcR/WBdiE0VoQH8jsH0whnFRjA9cquzi24w+ZB4E5K5tNqKbetQ== root@Note3

换个用户登录试试:

[root@Note3 ~]# ssh -l xj 192.168.10.4  #但是使用其它用户登录还是需要密码的
[email protected]'s password: 
Last login: Sat Jan  7 20:02:32 2017 from 192.168.10.3

[xj@Node4 ~]$

 2)scp

scp:是类cp命令,基于ssh协议跨主机复制

    scp SRC1 SRC2 ... DEST

分两种情况:

   源文件在本机,目录为远程

     scp /path/to/somefile... USERNAME@HOST:/path/to/somewhere

   源文件在远程,目标为本机

     scp USERNAME@HOST:/path/to/somefile /path/to/somewhere

-r:源文件是目录是使用-r,以实现递归复制

-p:保留源文件的复制及修改时间戳,权限等

-q:静默模式

-P:(大写)指定服务器端端口,-P要写在前面  

-o port=22 也可以指定使用的端口  

[root@Note3 src]# scp 192.168.10.4:/tmp/1.txt 192.168.10.4:/tmp/2.txt .
1.txt                                                100%   40     0.0KB/s   00:00    
2.txt                                                100%   54     0.1KB/s   00:00 
#复制多个文件有点不方便

                

 3)sftp  

sftp:基于ssh的ftp协议

只要openssh的服务器端配置文件中启用了如下项(默认是启用的):

   Subsystem sftp /usr/libexec/openssh/sftp-server

用法: sftp [username@]HOST[:dir]]   #sftp不支持-l指定用户

-o port=22 指定使用的端口

默认情况下登录到远程的/root目录。指定目录的话,如/opt,则登录到远程/opt目录

[root@Note3 ssh]# sftp 192.168.10.4
Connecting to 192.168.10.4...
sftp> help
Available commands:
bye                                Quit sftp
cd path                            Change remote directory to 'path'
chgrp grp path                     Change group of file 'path' to 'grp'
chmod mode path                    Change permissions of file 'path' to 'mode'
chown own path                     Change owner of file 'path' to 'own'
df [-hi] [path]                    Display statistics for current directory or
                                   filesystem containing 'path'
exit                               Quit sftp
get [-P] remote-path [local-path]  Download file    #下载文件,默认保存在当前本地目录下
help                               Display this help text
lcd path                           Change local directory to 'path'   #切换本地目录
lls [ls-options [path]]            Display local directory listing
lmkdir path                        Create local directory
ln oldpath newpath                 Symlink remote file
lpwd                               Print local working directory
ls [-1aflnrSt] [path]              Display remote directory listing
lumask umask                       Set local umask to 'umask'
mkdir path                         Create remote directory
progress                           Toggle display of progress meter
put [-P] local-path [remote-path]  Upload file
pwd                                Display remote working directory
quit                               Quit sftp
rename oldpath newpath             Rename remote file
rm path                            Delete remote file
rmdir path                         Remove remote directory
symlink oldpath newpath            Symlink remote file
version                            Show SFTP version
!command                           Execute 'command' in local shell
!                                  Escape to local shell
?                                  Synonym for help

  get和put都只能下载和上传单个文件,get支持通配符,put不支持,那如何上传多个文件?


4、openssh服务的服务端组件

sshd配置文件:/etc/ssh/sshd_config

服务脚本:/etc/rc.d/init.d/sshd

脚本配置文件:/etc/sysconfig/sshd

 

/etc/sysconfig/sshd_config详解: man sshd_config

#	$OpenBSD: sshd_config,v 1.80 2008/07/02 02:24:18 djm Exp $

# This is the sshd server system-wide configuration file.  See
# sshd_config(5) for more information.

# This sshd was compiled with PATH=/usr/local/bin:/bin:/usr/bin

# The strategy used for options in the default sshd_config shipped with
# OpenSSH is to specify options with their default value where
# possible, but leave them commented.  Uncommented options change a
# default value.

#Port 22                   #监听的端口,可以使用多次监听在多个端口上,重启sshd后生效,加了注释表示默认:如果有其它的Port设置,则使用其它的,否则使用这个
#AddressFamily any
#ListenAddress 0.0.0.0     #监听ip地址: 0.0.0.0 表示当前主机的所有ip
#ListenAddress ::          #监听的ipv6地址

# Disable legacy (protocol version 1) support in the server for new
# installations. In future the default will change to require explicit
# activation of protocol 1
Protocol 2                 #使用ssh协议的版本
 
# HostKey for protocol version 1      #ssh v1所用主机密钥
#HostKey /etc/ssh/ssh_host_key
# HostKeys for protocol version 2     #ssh v2所用的主机密钥,建立连接时,发送给客户端的公钥信息,让客户端验证本机是否是客户发端需要登录的主机,此时本机是作为ssh的服务端。那客户端如何验证呢?客户端有从PKI获得的证书里面有对方主机公钥,对比下就能确认了。当然我们都没有从CA获取过远程主机的证书,所以第一次登录远程主机时,会提示你不能验证对方主机,询问你是否连接,点了yes才连接,当然产生的一起后果自负咯。这个主机的密钥和密钥认证使用的密钥别混淆
#HostKey /etc/ssh/ssh_host_rsa_key
#HostKey /etc/ssh/ssh_host_dsa_key

# Lifetime and size of ephemeral version 1 server key
#KeyRegenerationInterval 1h
#ServerKeyBits 1024

# Logging
# obsoletes QuietMode and FascistLogging
#SyslogFacility AUTH                      
SyslogFacility AUTHPRIV          #记录日志的设施
#LogLevel INFO                   #日志级别INFO以上的都记录

# Authentication:

#LoginGraceTime 2m               #登录宽限期
#PermitRootLogin yes             #是否允许root登录
#StrictModes yes                 #严格模式,检测用户的家目录下文件的权限
#MaxAuthTries 6                  #最大认证次数,超过会断开,需要重新输入帐号和密码
#MaxSessions 10                  #最大会话数

#RSAAuthentication yes           #是否使用RSA算法验证
#PubkeyAuthentication yes        #是否使用公钥认证
#AuthorizedKeysFile	.ssh/authorized_keys           #认证所使用的文件
#AuthorizedKeysCommand none                            
#AuthorizedKeysCommandRunAs nobody

# For this to work you will also need host keys in /etc/ssh/ssh_known_hosts
#RhostsRSAAuthentication no      #是否启用远程主机的RSA认证,不安全
# similar for protocol version 2
#HostbasedAuthentication no      #基于主机认证,不安全
# Change to yes if you don't trust ~/.ssh/known_hosts for
# RhostsRSAAuthentication and HostbasedAuthentication
#IgnoreUserKnownHosts no
# Don't read the user's ~/.rhosts and ~/.shosts files
#IgnoreRhosts yes

# To disable tunneled clear text passwords, change to no here!
#PasswordAuthentication yes       #是否允许使用密码认证
#PermitEmptyPasswords no          #是否允许使用空密码
PasswordAuthentication yes

# Change to no to disable s/key passwords
#ChallengeResponseAuthentication yes
ChallengeResponseAuthentication no   #挑战式握手认证

# Kerberos options       #Kerberos(神犬?)认证选项,统一的认证协议,集中管理帐号和密码
#KerberosAuthentication no
#KerberosOrLocalPasswd yes
#KerberosTicketCleanup yes
#KerberosGetAFSToken no
#KerberosUseKuserok yes

# GSSAPI options           #GSSAPI认证选项
#GSSAPIAuthentication no
GSSAPIAuthentication yes
#GSSAPICleanupCredentials yes
GSSAPICleanupCredentials yes
#GSSAPIStrictAcceptorCheck yes
#GSSAPIKeyExchange no

# Set this to 'yes' to enable PAM authentication, account processing, 
# and session processing. If this is enabled, PAM authentication will 
# be allowed through the ChallengeResponseAuthentication and
# PasswordAuthentication.  Depending on your PAM configuration,
# PAM authentication via ChallengeResponseAuthentication may bypass
# the setting of "PermitRootLogin without-password".
# If you just want the PAM account and session checks to run without
# PAM authentication, then enable this but set PasswordAuthentication
# and ChallengeResponseAuthentication to 'no'.
#UsePAM no
UsePAM yes      #是否使用PAM认证

# Accept locale-related environment variables
AcceptEnv LANG LC_CTYPE LC_NUMERIC LC_TIME LC_COLLATE LC_MONETARY LC_MESSAGES
AcceptEnv LC_PAPER LC_NAME LC_ADDRESS LC_TELEPHONE LC_MEASUREMENT
AcceptEnv LC_IDENTIFICATION LC_ALL LANGUAGE
AcceptEnv XMODIFIERS

#AllowAgentForwarding yes
#AllowTcpForwarding yes
#GatewayPorts no
#X11Forwarding no
X11Forwarding yes            #是否转发图形窗口
#X11DisplayOffset 10
#X11UseLocalhost yes
#PrintMotd yes
#PrintLastLog yes
#TCPKeepAlive yes
#UseLogin no
#UsePrivilegeSeparation yes
#PermitUserEnvironment no
#Compression delayed
#ClientAliveInterval 0
#ClientAliveCountMax 3
#ShowPatchLevel no
#UseDNS yes
UseDNS no
#PidFile /var/run/sshd.pid
#MaxStartups 10:30:100
#PermitTunnel no
#ChrootDirectory none

# no default banner path
#Banner none

# override default of no subsystems
Subsystem	sftp	/usr/libexec/openssh/sftp-server

# Example of overriding settings on a per-user basis
#Match User anoncvs
#	X11Forwarding no
#	AllowTcpForwarding no
#	ForceCommand cvs server

##############下面的命令,配置文件中默认没有设置################

AllowUsers  user1 user2 ...      #用户白名单,仅允许这里指定的用户登录
AllowGroups                      #组白名单
DenyUsers                        #用户黑名单,注意:黑白名单不要同时使用

使用ssh的最佳实践: 

1)only use ssh protocol 2    仅使用ssh v2

2)limit users SSh access     限定使用ssh的用户

      Allowusers root vivek jerry    白名单,建议使用白名单

      DenyUser saroj anjali foo      黑名单

3)configure Idle Log out timeout Interval    配置空闲会话超时长

      ClientAliveCountMax 300   服务器没响应前,客户端能发送消息数,没必要配置

      ClientAliveInterval  0   超时时长,单位为s

4)Firwall SSH Port # 22        使用iptables设置ssh服务安全访问策略

5)change ssh port and Limit IP binding     改变默认的端口和使用的ip,勿使用默认22端口

       port 300

       Listaddress 192.168.1.5

       ListenAddress 202.54.1.5    

6)use Strong SSH passwords and passphrase   使用足够长足够复杂的密码,且定期更换。

      genpasswd(){

            local 1=$1

            [ "$1" == "" ]&& 1=20

            tr -dc A-Za-z0-9_

                      }

7)use Public key Based AUthentication       使用公钥认证

8)disable Empty password                禁止空密码

9)thwart ssh crakers (Brute  Force attack)  使用前,先扫描漏洞

10)rate-limit incoming port # 22 Connections    限制ssh访问频度,在pam在设置

11)use log analyzer       记录好日志,经常做日志分析

                     

5、用户登录信息获取

  lastlog显示每个用户最近一次成功的登录信息,

     -u USERNAME|UID

  lastb显示用户登录失败的日志信息: /var/log/btmp

  last用户成功登陆的日志信息:/var/log/wtmp

 

练习:

  基于密钥的认证,并限定仅允许root和hadoop用户登录


三、dropbear

  轻量级的ssh协议实现

1、安装dropbear  

[root@Node4 ~]# yum list|grep dropbear
dropbear.x86_64                             2016.74-1.el6                epel   
[root@Node4 ~]# yum install dropbear -y

[root@Node4 ~]# rpm -ql dropbear
/etc/dropbear
/etc/rc.d/init.d/dropbear
/usr/bin/dbclient
/usr/bin/dropbearconvert
/usr/bin/dropbearkey
/usr/sbin/dropbear
/usr/share/doc/dropbear-2016.74
/usr/share/doc/dropbear-2016.74/CHANGES
/usr/share/doc/dropbear-2016.74/LICENSE
/usr/share/doc/dropbear-2016.74/README
/usr/share/doc/dropbear-2016.74/TODO
/usr/share/man/man1/dbclient.1.gz
/usr/share/man/man1/dropbearconvert.1.gz
/usr/share/man/man1/dropbearkey.1.gz
/usr/share/man/man8/dropbear.8.gz

2、dropbear的使用

[root@Node4 ~]# dropbear --help
Invalid option --
Dropbear server v2016.74 https://matt.ucc.asn.au/dropbear/dropbear.html
Usage: dropbear [options]
-b bannerfile	Display the contents of bannerfile before user login
		(default: none)
-r keyfile  Specify hostkeys (repeatable)
		defaults: 
		dss /etc/dropbear/dropbear_dss_host_key
		rsa /etc/dropbear/dropbear_rsa_host_key
		ecdsa /etc/dropbear/dropbear_ecdsa_host_key
-R		Create hostkeys as required
-F		Don't fork into background
-E		Log to stderr rather than syslog
-m		Don't display the motd on login
-w		Disallow root logins
-s		Disable password logins
-g		Disable password logins for root
-B		Allow blank password logins
-j		Disable local port forwarding
-k		Disable remote port forwarding
-a		Allow connections to forwarded ports from any host
-p [address:]port
		Listen on specified tcp port (and optionally address),
		up to 10 can be specified
		(default port is 22 if none specified)
-P PidFile	Create pid file PidFile
		(default /var/run/dropbear.pid)
-i		Start for inetd
-W  (default 24576, larger may be faster, max 1MB)
-K   (0 is never, default 0, in seconds)
-I   (0 is never, default 0, in seconds)
-V    Version
[root@Node4 ~]#

需要准备密钥文件: #使用服务脚本会自动生成密钥文件

[root@Node4 ~]# dropbearkey --help
Unknown argument --help
Usage: dropbearkey -t  -f  [-s bits]
-t type	Type of key to generate. One of:               #指定使用的算法
		rsa
		dss
		ecdsa
-f filename    Use filename for the secret key.
               ~/.ssh/id_dropbear is recommended for client keys.
-s bits	Key size in bits, should be a multiple of 8 (optional) #指定长度,应该为8的整数倍
           DSS has a fixed size of 1024 bits
           ECDSA has sizes 256 384 521 
-y		Just print the publickey and fingerprint for the
		private key in .
		

[root@Node4 ~]# dropbearkey -t rsa -f /etc/dropbear/dropbear_rsa_host_key
Generating key, this may take a while...
Public key portion is:
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCYX53Gx6qDT0/Z06qOeztv3MKvSLU0FvCr6zu63ZZRJTbjhYDE3WZkjD/TELBnrl4bl3pGes7fTEL2Es/qD8lX+5sM67ik44RDSKdWPJA437n9YMsBVuS3WR4Xw109/ndPwbP/Kuwh5sOgVltaxrbNH7txeFOgkzC88HPPkfra7t4NN5/+vWnOu1fjKOdDgwTEj8frA2TGqeqEj0qkA4gEY9GNa/CyjeZip6iDHDJC70u6bCkjakhQoGO4u3iX1EA8CU2zNjALvYudo9TEUH7VWwWkJpfW1MOx/8zsadVGNEtsScNIgaVTMf6TWi47FYgkezHow50J56HtmaTl2PCR root@Node4
Fingerprint: md5 0d:31:e6:e1:8f:d8:59:ab:a4:46:ce:52:44:a9:13:ec

[root@Node4 ~]# dropbearkey -t dss -f /etc/dropbear/dropbear_dss_host_key
Generating key, this may take a while...
Public key portion is:
ssh-dss AAAAB3NzaC1kc3MAAACBAKoYa5saq/tTsd9UyVlndMRAPh618fcejqNl8dQIJ4Jjq9Oi6GzGkHMtE7PGNiVgYuB40IxXXKv7tu0G07WBBjgu9hNlSBqj1R/hg1rUDxALEdXZs2BOGiYsh3W9A+ytsMSxf37RtGFpC/iHvZGCA1ImSCZPf1uBWauGoohr+kjfAAAAFQCFCwYEDIbzML87JP98RD41lCMPdwAAAIEAhcylyf3prcPUB8XF1wcEPbNxHS1svCh+h1htcYlyg5Nh/g+nefcFq48nSVnYgcppjC8hTTu+oDw9edXnSBQh9HcfwbYlrNrMbeOts9O6FunNVUBQ9eIMyMPfDjWFhAt6c0A0gGyCOjt98M0rDp42t4NOujybj/4E3XViV/ZHkIUAAACATylYgPTZJ/2teBeGRCnnl2xoj9yTGnLc6ytkXaXiQR05ROl57ONLAg3noP76NS+TmqQOaEVxnnmOvWmz5U/jV94kTGkocjc2prTURaSnsw2nSPb/58btRNHQUxIoiSoaq1ILYcAVypryC/X9IfXXfKUxD67lCj0tpbrqeIIbYKE= root@Node4
Fingerprint: md5 6d:bb:62:3c:0d:5a:77:ad:8e:57:40:44:b7:35:37:29
[root@Node4 ~]# ls /etc/dropbear/
dropbear_dss_host_key  dropbear_rsa_host_key
[root@Node4 ~]#

启动dropbear:

#手动指定端口启动
[root@Node4 dropbear]# dropbear -p 22022  
[root@Node4 dropbear]# ss -tunlp|grep :22
tcp    LISTEN     0      128                   :::22                   :::*      users:(("sshd",1656,4))
tcp    LISTEN     0      128                    *:22                    *:*      users:(("sshd",1656,3))
tcp    LISTEN     0      128                   :::22022                :::*      users:(("dropbear",2097,5))
tcp    LISTEN     0      128                    *:22022                 *:*      users:(("dropbear",2097,4))

#使用服务脚本启动dropbear,只要在服务脚本中启动dropbear添加一个-p选项指定端口就可

   可以看到dropbear服务已经监听在22022端口,就可以使用ssh协议的客户端工具远程登录了,如dbclint


   telnet和ssh都是文本协议,只支持字符通信方式,不支持图形化的通信,不能显示图形界面,比如不支持windows系统。支持图形化通信需要远程桌面协议。


四、VNC  

1、VNC简介

   VNC Virtual Network Console 是虚拟网络控制台的缩写。它是一款优秀的远程控制工具软件,由著名的AT&T的欧洲研究实验室开发的。VNC server与VNC viewer支持多种操作系统Unix,Linux,windows及MacOS因此可将VNC server及VNC viewer分别安装在不同的操作系统中进行控制。


2、整个VNC运行的工作流程如下
 1)VNC客户端通过浏览器或VNC Viewer连接至VNC Server。
 2)VNC Server传送一对话窗口至客户端,要求输入连接密码,以及存取的VNC Server显示装置。
 3)在客户端输入联机密码后,VNC Server验证客户端是否具有存取权限。
 4)若是客户端通过VNC Server的验证,客户端即要求VNC Server显示桌面环境。
 5)VNC Server通过X Protocol要求X Server将画面显示控制权交由VNC Server负责。
 6)VNC Server将来由X Server的桌面环境利用VNC通信协议送至客户端,并且允许客户端控制VNC Server的桌面环境及输入装置。


3、安装tigervnc

[root@Node4 ~]# rpm -qa|grep vnc
[root@Node4 ~]# yum list|grep tigervnc
tigervnc.x86_64                             1.1.0-18.el6                 base   
tigervnc-server.x86_64                      1.1.0-18.el6                 base   
tigervnc-server-applet.noarch               1.1.0-18.el6                 base   
tigervnc-server-module.x86_64               1.1.0-18.el6                 base   
[root@Node4 ~]# yum install tigervnc-server tigervnc

[root@Node4 ~]# rpm -ql tigervnc-server
/etc/rc.d/init.d/vncserver
/etc/sysconfig/vncservers
/usr/bin/Xvnc
/usr/bin/vncconfig
/usr/bin/vncpasswd
/usr/bin/vncserver
/usr/bin/x0vncserver
/usr/share/man/man1/Xvnc.1.gz

[root@Node4 ~]# rpm -ql tigervnc
/usr/bin/vncviewer
/usr/share/applications/vncviewer.desktop


4、tigvnc的使用

  tigvnc服务端要安装桌面环境,要不然vnc客户端连进去就是黑屏

[root@www ~]# yum groupinstall "desktop" -y   #默认的是gnome桌面

不做任何配置就可以直接启用vnc服务端:

#服务端
[root@Node3 ~]# vncserver --help

usage: vncserver [:] [-name ] [-depth ]
                 [-geometry x]
                 [-pixelformat rgbNNN|bgrNNN]
                 [-fp ]
                 [-fg]
                 [-autokill]
                 ...

       vncserver -kill 

       vncserver -list

[root@Node3 ~]# vncserver

You will require a password to access your desktops.

Password:
Verify:                     #第一次启动vncserver提示要设置6个字符以上的密码

New 'Node3:1 (root)' desktop is Node3:1       #启动了1个桌面

Creating default startup script /root/.vnc/xstartup
Starting applications specified in /root/.vnc/xstartup
Log file is /root/.vnc/Node3:1.log

[root@Node3 ~]# ss -tunlp|grep vnc      #监听在5901上
tcp    LISTEN     0      5                      *:5901                  *:*      users:(("Xvnc",10125,3))

[root@Node3 ~]# vncserver         #可以启动多次,启动了多个桌面,客户端使用不同的端口就连入不同的桌面,如果使用相同的端口就会把前面的用户给挤下来

New 'Node3:2 (root)' desktop is Node3:2

Starting applications specified in /root/.vnc/xstartup
Log file is /root/.vnc/Node3:2.log

[root@Node3 ~]# ss -tunlp|grep vnc
tcp    LISTEN     0      5                      *:5901                  *:*      users:(("Xvnc",10125,3))
tcp    LISTEN     0      5                      *:5902                  *:*      users:(("Xvnc",11073,3))

[root@Node3 ~]# vncserver :5         #还可以自定义桌面号,监听的端口为5900+桌面号

New 'Node3:5 (root)' desktop is Node3:5

Starting applications specified in /root/.vnc/xstartup
Log file is /root/.vnc/Node3:5.log

[root@Node3 ~]# ss -tunlp|grep vnc
tcp    LISTEN     0      5                      *:5901                  *:*      users:(("Xvnc",10125,3))
tcp    LISTEN     0      5                      *:5902                  *:*      users:(("Xvnc",11073,3))
tcp    LISTEN     0      5                      *:5905                  *:*      users:(("Xvnc",11653,3))

[root@Node3 ~]# service vncserver status    #但是此时用vncserver脚本管理不了,需要修改配置文件才可以
Xvnc (pid 11653 11073 10125) 正在运行...
[root@Node3 ~]# service vncserver stop
关闭 VNC 服务器:                                          [失败]
[root@Node3 ~]# service vncserver start
正在启动 VNC 服务器:no displays configured                [失败]


vnc客户端使用:

        vncviewer [ip][:端口号或桌面号]

[root@Node4 ~]# vncviewer --help

TigerVNC Viewer for X version 1.1.0 - built May 11 2016 13:00:50
Copyright (C) 1999-2011 TigerVNC Team and many others (see README.txt)
See http://www.tigervnc.org for information on TigerVNC.

usage: vncviewer [parameters] [host:displayNum] [parameters]
       vncviewer [parameters] -listen [port] [parameters]
       
[root@Node4 ~]# vncviewer 192.168.10.3   #不指定要连接远程主机的哪个桌面,默认连接的是0桌面也就是5900端口,但直接用vncserver启动的桌面默认是从1开始也就是5901端口

TigerVNC Viewer for X version 1.1.0 - built May 11 2016 13:00:50
Copyright (C) 1999-2011 TigerVNC Team and many others (see README.txt)
See http://www.tigervnc.org for information on TigerVNC.

Sun Jan  8 21:38:25 2017
 main:        unable connect to socket: Connection refused (111)

【linux基础】26、远程登录工具_第1张图片


5、配置vncserver

修改vnc的服务脚本配置文件:/etc/sysconfig/vncservers

#只了解最后2行的配置意义即可

# VNCSERVERS="2:myusername"
# VNCSERVERARGS[2]="-geometry 800x600 -nolisten tcp -localhost"
 VNCSERVERS="0:root 1:root 5:xj"            
#启动的桌面后和用户,用户一定要是已存在的,可以用空格分隔写多个,每个用户都必须为远程桌面设置了密码(切换到该用户,第一次手动启动下vncserver即提示要设置秘密)
 VNCSERVERARGS[0]="-geometry 800x600 -nolisten tcp"
  #设置远程桌面的默认分辨率,连接进来后远程用户可以自己设置分辨率,-localhost表示该桌面只允许本机登录(使用localhost或127.0.0.1连接),应该去掉

修改完后kill掉之前vnc进程,用服务脚步启动vnc:

[root@Node3 ~]# service vncserver status
Xvnc 已停
[root@Node3 ~]# service vncserver start
正在启动 VNC 服务器:0:root 
New 'Node3:0 (root)' desktop is Node3:0

Starting applications specified in /root/.vnc/xstartup
Log file is /root/.vnc/Node3:0.log

1:root 
New 'Node3:1 (root)' desktop is Node3:1

Starting applications specified in /root/.vnc/xstartup
Log file is /root/.vnc/Node3:1.log

5:xj 
New 'Node3:5 (xj)' desktop is Node3:5

Starting applications specified in /home/xj/.vnc/xstartup
Log file is /home/xj/.vnc/Node3:5.log

                                                           [确定]
[root@Node3 ~]# ss -tunlp|grep vnc
tcp    LISTEN     0      5                      *:5900                  *:*      users:(("Xvnc",7814,3))
tcp    LISTEN     0      5                      *:5901                  *:*      users:(("Xvnc",8111,3))
tcp    LISTEN     0      5                      *:5905                  *:*      users:(("Xvnc",8535,3))
[root@Node3 ~]#

6、xrdp

  VNC是大部分Linux发行版默认的基于RFB协议的远程桌面程序,但对于普通用户来说,VNC的用户体验并不好,比较慢,还需要安装客户端。Windows的远程桌面基于RDP协议,在Linux下,我们也是可以找到开源的rdpserver的,这就是xrdp。

安装xrdp还可以直接使用windows上的远程桌面来登录:

[root@Node3 ~]# yum install xrdp

[root@Node3 ~]# rpm -ql xrdp
/etc/logrotate.d/xrdp
/etc/pam.d/xrdp-sesman
/etc/rc.d/init.d/xrdp
/etc/sysconfig/xrdp
/etc/xrdp
/etc/xrdp/km-0407.ini
/etc/xrdp/km-0409.ini
/etc/xrdp/km-040c.ini
/etc/xrdp/km-0410.ini
/etc/xrdp/km-0419.ini
/etc/xrdp/km-041d.ini
/etc/xrdp/rsakeys.ini
/etc/xrdp/sesman.ini
/etc/xrdp/startwm.sh
/etc/xrdp/xrdp.ini
/etc/xrdp/xrdp.sh
/usr/bin/xrdp-dis
/usr/bin/xrdp-genkeymap
/usr/bin/xrdp-keygen
/usr/bin/xrdp-sesadmin
/usr/bin/xrdp-sesrun
/usr/bin/xrdp-sestest
/usr/lib64/xrdp

启动xrdp: 

[root@Node3 ~]# service xrdp status
xrdp 已停
xrdp-sesman 已停
[root@Node3 ~]# service xrdp start
正在启动 xrdp:                                            [确定]
正在启动 xrdp-sesman:                                     [确定]
[root@Node3 ~]# service xrdp status
xrdp (pid  16698) 正在运行...
xrdp-sesman (pid  16702) 正在运行...
[root@Node3 ~]# ss -tunlp|grep xrdp
tcp    LISTEN     0      2              127.0.0.1:3350                  *:*      users:(("xrdp-sesman",16702,6))
tcp    LISTEN     0      2                      *:3389                  *:*      users:(("xrdp",16698,6))
[root@Node3 ~]#

   xrdp依赖于tigervnc-server,会自动调用tigervnc-server,如果只使用xrdp,vnc可以不用配置,可以直接使用。

   通过3389端口连接远程桌面时,xrdp会把所有通过3389端口数据都转发到vncserver的端口上,同时vncserver只监听127.0.0.1这个地址,所以vncserver的端口是不对外开放的。

   除此之外,vncserver还为每一次远程桌面会话分配一个系统端口,注意这个端口很重要。如果我们要连接上一次的远程桌面会话A的,我们只需要连接会话A所在vncserver端口即可,默认就是连上次使用的桌面。

注意:

   yum安装xrdp不会自动安装tigernv-server,一定要先安装tigervnc-server再安装xrdp

   xrdp的配置就不管了,图形界面用的很少,以后用到再补充