远程访问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/




原文地址:https://www.cnblogs.com/tsw1107/p/5e046e7f4aa25d649baebd84caca4d98.html