有待整理
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