远程访问Linux的常见方式
访问方式
	不加密文字界面:telnet、rsh
	加密文字界面:SSH
	图形界面:Xdmcp、RDP、VNC
SSH
	SSH用来取代finger、R shell(rlogin、rcp、rsh)、telnet和taik等连接方式,它传输更安全
	SSH默认提供了2个服务
		ssh
		sftp-server
	SSH版本
		V2比V1多了连线检测,防止线路插入攻击代码
	SSH加密
		密钥系统DSA、RSA和Diffie-Hellman在加解密速度和安全性方面各有不同
		用户到服务器的双向加密传输过程
			C -> S:C向S发送资料时,用S的公钥加密后发出,S收到后用自己的私钥解密
			S -> C:S向C发送资料时,用C的公钥加密后发出,C收到后用自己的私钥解密
			总的来说,公钥是用来加密,而私钥用来解密,私钥要掌握在自己手中用来解密用
	SSH连接建立过程:
		-S端产生公私钥。第一次启动时生成$keys所表示的三类加密系统算法的公钥和私钥文件,如果这些文件缺失,则在sshd服务重启后重新生成
			$keys:/etc/ssh/ssh_host_xxx
		-C端第一次与S端交互:C发送连接请求,收到S端发回来的公钥
		-记录/比对S端的公钥,同时随机生成自己的密钥对
			S端的公钥存放在C端的~/.ssh/known_hosts中
		-C端将用S端公钥加密的自己公钥传给S端
		-开始传输。C端向S端发送请求时用S端的公钥加密请求,S端收到请求后用自己的私钥解密并用C端的公钥加密响应,C端收到响应后用自己的私钥解密
	启动SSH服务
		service sshd start
	ssh命令用法
		ssh -f [-o option] [-p port] [username@]IP command
			-f :结合command使用,让ssh命令执行结束,而command在远程主机后台运行
			-o 选型
				ConnectTimeout=N,N表示秒数
				StrictHostKeyChecking=[yes|no|ask],默认是ask,而no则表示远程主机的公钥直接写入到本地~/.ssh/known_hosts,在脚本中非常好用
			-p 指定非默认端口
		举例:
			ssh -f centos@127.0.0.1 find / &> ~/find1.log
			rm ~/.ssh/known_hosts
			ssh -o StrictHostKeyChecking=no centos@127.0.0.1 find
	sftp交互式文件传输命令
		传输指令
			上传:put [本地文件或目录] [远程目录路径]
			下载:get [远程目录或文件] [本地文件或目录]
			支持通配符,如get *.bak
		本地指令:开头带l
			lpwd lmkdir lcd lls
		远程指令:
			pwd 
			mkdir rename ln
			rmdir rm 
			cd ls 
			chgrp chown chmod
			exit bye quit
		举例:
			将本地的/etc/ssh/ssh_host*.pub上传到远程服务器的/tmp目录,并将远程服务器的.ssh/known_hosts下载到本地/tmp目录
			sftp> pwd
			sftp> cd /etc/ssh
			sftp> ls
			sftp> lpwd
			sftp> lcd /tmp
			sftp> get ssh_host*.pub
			sftp> lls 
			sftp> lcd /home/centos/.ssh/
			sftp> cd /tmp
			sftp> put known_hosts 
			sftp> ls
	scp非交互式文件传输命令,异地备份
		上传:scp [-pr] [-l speed] file [username@]ip:path
		下载:scp [-pr] [-l speed] [username@]ip:file path
			-p 保留文件权限
			-r 对目录递归处理
			-l 速率,单位K/bit,800表示100K/B
		举例:
			将一个10M的文件备份到远程主机
				dd if=/dev/zero of=10M.txt bs=1M count=10
				scp 10M.txt root@127.0.0.1:/tmp
	SSH的图形客户端
		ssh客户端xshell使用举例
			界面显示中文时常常出现乱码,怎么办?需要从三方面着手确保编码兼容
				-文件内容编码
				-shell环境编码(LANG变量)
				-Xshell编码设置
			常用设置
				指定使用SSH V2登录
				缓冲区大小 10000行
				字体名、字体大小、编码
	通过密钥认证实现ssh、scp以及sftp无密码登录
		最快创建SSH互信的方式
			-确保C端和S端家目录下没有.ssh目录
			-在C端执行如下命令,交互过程一直按回车默认生成.ssh下的密钥对id_rsa和id_rsa.pub
				ssh-keygen
			-在C端执行如下命令将公钥传给S端
				ssh-copy-id -i .ssh/id_rsa.pub root@127.0.0.1
		最慢创建SSH互信的方式
			在客户端生成密钥对并将公钥发送给服务器端
				mkdir .ssh
				touch .ssh/known_hosts
				ssh-keygen
				chmod 700 .ssh && chmod 600 .ssh/id_rsa && chmod 644 .ssh/{id_rsa.pub,known_hosts}
				scp .ssh/id_rsa.pub root@127.0.0.1:/tmp
			在服务器端设置号客户端公钥的文件名和权限即可
				mkdir .ssh
				cat /tmp/id_rsa.pub >> .ssh/authorized_keys
				chmod 700 .ssh && chmod 600 .ssh/authorized_keys 
	更安全的SSH
		SSH只是做了传输加密,但是其服务本身并不安全,需要对其限制访问范围
		SSH配置增强:
			可设置项,按顺序设置/etc/ssh/sshd_config
				PermitRootLogin
				DenyUsers
				AllowUsers
				DenyGroups
				AllowGroups
			下面这个是禁止root用户、dev用户和test组登录的配置信息,日志见/var/log/secure
			登录提示如下:
				Permission denied, please try again.
			日志信息如下:
				Failed password for root from 127.0.0.1 port 51478 ssh2
				User dev from 127.0.0.1 not allowed because listed in DenyUsers
				User test from 127.0.0.1 not allowed because a group is listed in DenyGroups
			配置项目如下:
				PermitRootLogin no
				DenyUsers dev
				DenyGroups test
		TCP wrapper(简化版的iptables)
			样例:只允许172.16.0.1以及192.168.68.0网段的用户登录
			/etc/host.allow
				sshd: 172.16.0.1 192.168.68.0/255.255.255.0
			/etc/host.deny 
				sshd: ALL
		iptables
			样例:只允许172.16.0.1主机访问,禁止192.168.68.0/24网段的主机访问
			iptables -A INPUT -i eth2 -s 192.168.68.0/24 -p tcp --dport 22 -j DROP
			iptables -A INPUT -i eth0 -s 172.16.0.1 -p tcp --dport 22 -j ACCEPT
Xdmcp
	通过Xdmcp协议,在windows上利用xbrowser打开远程的Linux桌面
	相关概念请参考:
		http://linux.vbird.org/linux_basic/0590xwindow.php
		http://linux.vbird.org/linux_server/0310telnetssh.php#xdmcp_theory
	配置和使用过程
		Linux上配置Xdmcp服务端
			yum groupinstall "Desktop" "Desktop Platform" "X Window System"
			vim /etc/gdm/custom.conf 修改的主要配置项如下
				[security]
				AllowRemoteRoot=yes
				DisallowTCP=false
				[xdmcp]
				Enable=true
				Post=177
			gdm & 
			//如果启动失败,提示如果错误
			//** (gdm-binary:7252): WARNING **: Couldn't connect to system bus: Failed to connect to socket /var/run/dbus/system_bus_socket: No such file or directory
			//请使用service messagebus start启动服务
			netstat -tulnp
			//udp  0   0 0.0.0.0:177    0.0.0.0:*                 7441/gdm-binary
			//tcp  0   0 0.0.0.0:6000   0.0.0.0:*     LISTEN      7453/Xorg
			//6000端口是DisallowTCP=false所启用的,177端口才是我们想要的
			iptables -A INPUT -p UDP -i eth0 --dport 177 --sport 1024:65534  -s 172.16.0.0/24 -j ACCEPT
		windows上配置Xdmcp客户端
			启动Xmanager下的Xbrowser,在Xdmcp下会自动发现能连接的主机,双击打开就能开到界面了
VNC
	相比Xdmcp省去很多防火墙端口设置的复杂度。默认情况下,一用户对应一个VNC服务。
	下面是的例子是说明如何启动,连接和关闭VNC服务。注意,你需要那个用户的VNC服务就切换到该用户来启动VNC服务
		安装和启动centos6上的vncserver
			yum -y install tigervnc-server
			vncserver :n #n在0-10范围,启动5901端口接收对窗口1的请求,5902端口对应窗口2,以此类推;下一步设置vnc密码
			vncpasswd #修改vnc密码
			iptables -A INPUT -i eth0 -s 172.16.0.0/24 -p tcp --dport 5900:5910 -j ACCEPT
		用windows上的realvnc连接VNC
			在VNC server中输入 $vncIP:n,也就是输入vnc服务器的IP和窗口号
			输入VNC密码
		关闭centos6上的vncserver
			vncserver -kill :1
	这是VNC开机启动的例子
		vim /etc/sysconfig/vncservers
			VNCSERVERS="2:myusername" #窗口2被myusername
			VNCSERVERARGS[3]="-geometry 1920x1080 -nolisten tcp" #窗口2的设置参数
		chkconfig vncserver on
		service vncserver start
	这是VNC教学同步的配置方法:
		http://pincer.blog.51cto.com/5759011/1617388/
 
                     
                    
                 
                    
                
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号