有待整理
SSH协议
通过公钥加密技术实现服务器身份验证。
安全的隧道
SSH会自动加密和解密所有SSh客户端与服务端之间的网络数据。这一过程也称tunneling(隧道)
因为SSH为其他TCP连接提供了一个安全的通道来进行传输:Telnet,SMTP,LDAP等TCP应用,避免了明文传输(用户名/密码等敏感信息)SSH端口转发TCP端口
端口转发可以“绕过“防火墙对端口的直接限制
防火墙限制了某些网络端口,但是允许SSH的连接:
加密SSH Client端至SSH Server端之间的通讯数据,建立TCP连接。远程登录
通过scp或sftp实现备份和远程文件传输等的推荐安全协议。
SSH保证两个网络或两个系统之间数据交互的机密性和完整性。
ssh软件
- sshd - 服务端 默认监听22端口,提供服务
- ssh - Linux Shell下自由软件OpenSSH套件中的客户端连接工具
- Xshell - win下的ssh客户端
ssh [option]
-1:强制使用ssh协议版本1;
-2:强制使用ssh协议版本2;
-4:强制使用IPv4地址;
-6:强制使用IPv6地址;
-A:开启认证代理连接转发功能;
-a:关闭认证代理连接转发功能;
-b:使用本机指定地址作为对应连接的源[ip](http://man.linuxde.net/ip)地址;
-C:请求压缩所有数据;
-F:指定ssh指令的配置文件;
-f:后台执行ssh指令;
-g:允许远程主机连接主机的转发端口;
-i:指定身份文件;
-l:指定连接远程服务器登录用户名;
-N:不执行远程指令;
-o:指定配置选项;
-p:指定远程服务器上的端口;
-q:静默模式;
-X:开启X11转发功能;
-x:关闭X11转发功能;
-y:开启信任X11转发功能。
默认配置文件和SSH端口
/etc/ssh/sshd_config #OpenSSH服务器配置文件
/etc/ssh/ssh_config #OpenSSH客户端配置文件
~/.ssh/ #用户SSH配置目录
~/.ssh/authorized_keys #用户公钥 RSA或DSA
/etc/nologin #如果存在这个文件,sshd会拒绝除root用户外的其它用户登录
/etc/hosts.allow和/etc/hosts.deny #定义tcp-wrapper执行的访问控制列表
修改默认配置 - OpenSSH服务器配置文件
编辑配置文件:去掉最前面的#号,保存
vi /etc/ssh/sshd_config
#Port 22
修改端口号
#PermitRootLogin yes #将yes修改成no
禁止root登录 - - - 通常用普通用户登录,需要管理远程主机时再切换到root用户。不直接用root超级权限登录,有安全隐患
#Protocol 2,1 #修改为Protocol 2
仅允许SSH协议版本2 - - - SSH协议版本1有安全问题:中间人攻击(man-in-the-middle),注入(insertion)攻击
#Banner /some/path
设置登录时提示信息 - - - 将提示文本文件banner.xt文件的完整路径,替换掉/some/path
MaxAuthTries 3 #最大登录次数 密码错误超过3次拒绝登录
#重启服务
/etc/init.d/ssh restart
ssh登录
常用格式:
ssh [-l login_name] [-p port] [user@]hostname
ssh://用户名:密码@IP:端口
#指定用户登录
ssh root@192.168.0.11
ssh -l root 192.168.0.11
ssh 192.168.0.11#不指定用户时,默认为本机用户名
#指定端口
ssh name@remoteserver -p 2222
ssh remoteserver -l name –p 2222
ssh运行命令
ssh -l username remoteserver command
ssh host -l user $(<cmd.txt) #复杂的远程shell命令
ssh host -l user “`cat cmd.txt`” #更具移植性
比较远程和本地文件的差异
ssh user@host cat /path/to/remotefile | diff /path/to/localfile –
开启隧道 从某主机的80端口到本地主机2001端口的
ssh -N -L 2001:localhost:80 somemachine
本地主机执行命令后,在浏览器中输入http://localhost:2001即可访问服务器80端口上的网站
无密码SSH登录
ssh-keygen; #先使用ssh-keygen命令生成 密钥
ssh-copy-id userTom@host #复制SSH密钥到目标主机
ssh userTom@host #无密码即可登录
通过跳板机(host1) 操作无法直接访问的远程主机host2
在此过程中要先输入host1的密码,再输入host2的密码,就可操作host2
ssh -t host1 ssh host2
端口映射
假如公司内网有1台web服务器,名为webserver,但是只对内不对外,外网就无法直接访问,但可用ssh进行端口映射来实现外网访问内网的web服务器
** webserver可以用ssh登录到 远端主机remoteserver**:
查看remoteserver是否开通3000端口
netstat -an|grep 3000
没被占用就继续映射
ssh -R 3000:localhost:80 remoteserver
尝试打开内网服务器webserver上的网页
w3m http://127.0.0.1:3000/
如果能打开界面,说明映射成功.但这只能remoteserver机器访问webserver
因为3000端口绑定的是remoteserver机器的127.0.0.1端口。
可以编辑remoteserver机器上的/etc/ssh/sshd_config文件并添加如下内容:
添加内容GatewayPorts yes
把监听端口3000绑定到 0.0.0.0 地址上,这样外部的所有机器都能访问到这个监听端口,然后保存退出。重启ssh服务。
此时其它机器就可以访问内网的webserver,浏览器打开
http://remoteserver:3000/
scp - 传送文件 【本地主机】执行该命令!
远程主机的/tmp/test 文件 复制到 本地主机的/bak文件夹下
scp -p root@192.168.1.120:/tmp/test /bak
远程主机的/root/lnmp0.4/ 目录 复制到 本地主机的目录
scp -P 2222 -r root@www.tom.net:/root/lnmp/ /home/lnmp/
将本地/bak/1234 文件 复制到 远程主机的/tmp路径下
scp -p /bak/1234 root@192.168.1.120:/var/www/html
-p
保留原始文件的修改时间等
Preserves modification times, access times, and modes from the original file.
-r
Recursively copy entire directories. Note that scp follows symbolic links(软连接) encountered in the tree traversal.
-P port
更改了SSH默认端口后的端口,没改不用写该参数。
Specifies the port to connect to on the remote host. Note that this option is written with a capital ‘P’, because -p is already reserved for preserving the times and modes of the file in rcp(1).
sftp
禁用/删除openssh-server
CentOS / RHEL / Fedora Linux用户可以使用下面的yum命令禁用和删除openssh-server:
chkconfig sshd off
yum erase openssh-server