1 、 復制 制 SSH 密 鑰 到 目 標 主機,開 啟 無 密 碼SSH 登 錄
ssh-copy-id user@host
如果還沒有密鑰,請使用 ssh-keygen 命
令生成。
2 、從 某的 主機的 80 端 口 開 啟 到本 地 主機2001 端 口 的 隧 道
ssh -N -L2001:localhost:80 somemachine
ssh用法及命令,現 在 你 可 以 直 接 在 瀏 覽 器 中 輸 入
http://localhost:2001 訪問這個網站。
3 、 將 你的 麥 克 風 輸 出 到 遠 程 計 算 機的 揚 聲器
dd if=/dev/dsp | ssh -c arcfour -C
username@host dd of=/dev/dsp
這樣來自你麥克風端口的聲音將在 SSH 目標
計算機的揚聲器端口輸出,但遺憾的是,聲音質量很差,你會聽到很多嘶嘶聲。
4 、比 較遠 程 和本 地 文件
ssh user@host cat /path/to/remotefile |
diff /path/to/localfile –
在比較本地文件和遠程文件是否有差異時這
個命令很管用。
常用cmd命令,5 、 通過 SSH 掛 載 目錄/ 文件系統
sshfs name@server:/path/to/folder
/path/to/mount/point
從http://fuse.sourceforge.net/sshfs.h
tml 下載 sshfs,它允許你跨網絡安全掛載一
個目錄。
6 、 通過 中 間 主機建立 立 SSH 連 接
ssh -t reachable_host ssh
unreachable_host
Unreachable_host 表示從本地網絡無法
直接訪問的主機,但可以從 reachable_host
所 在 網 絡 訪 問 , 這 個 命 令 通 過 到
reachable_host 的“隱藏”連接,創建起到
unreachable_host 的連接。
ssh是什么命令。7 、 將的 你的 SSH 公 鑰 復 制到 遠 程 主機,開 啟無 密 碼 登 錄 – 簡單的方 法
ssh-copy-id username@hostname
8 、 直 接 連 接到 只 能 通過機 主機 B 連 接的主機A
ssh -t hostA ssh hostB
當然,你要能訪問主機 A 才行。
9 、 創 建到 目 標 主機的 持久 化 連 接
ssh -MNf <user>@<host>
如何使用、在后臺創建到目標主機的持久化連接,將這
個命令和你~/.ssh/config 中的配置結合使
用:
Host host
ControlPath ~/.ssh/master-%r@%h:%p
ControlMaster no
所有到目標主機的 SSH 連接都將使用持久化
SSH 套接字,如果你使用 SSH 定期同步文件
(使用 rsync/sftp/cvs/svn),這個命令
將非常有用,因為每次打開一個 SSH 連接時不
會創建新的套接字。
10 、 通過 SSH 連 接 屏 幕
ssh -t remote_host screen –r
直接連接到遠程屏幕會話(節省了無用的父
bash 進程)。
wget命令,11 、 端 口 檢測 ( 敲 門 )
knock <host> 3000 4000 5000 && ssh -p
<port> user@host && knock <host> 5000
4000 3000
在一個端口上敲一下打開某個服務的端口
(如 SSH),再敲一下關閉該端口,需要先安
裝 knockd,下面是一個配置文件示例。
[options]
logfile = /var/log/knockd.log
[openSSH]
sequence = 3000,4000,5000
seq_timeout = 5
command = /sbin/iptables -A INPUT -i eth0
-s %IP% -p tcp –dport 22 -j ACCEPT
tcpflags = syn
[closeSSH]
sequence = 5000,4000,3000
seq_timeout = 5
command = /sbin/iptables -D INPUT -i eth0
-s %IP% -p tcp –dport 22 -j ACCEPT
tcpflags = syn
12 、 刪除 文本文件中的一行內 容 , 有 用的修復
ssh-keygen -R <the_offending_host>
在這種情況下,最好使用專業的工具。
常見dos命令?13 、 通過 SSH 運行 復 雜的 遠程 程 shell 命令
ssh host -l user $(<cmd.txt)
更具移植性的版本:
ssh host -l user “`cat cmd.txt`”
14 、過 通過 SSH 將 將 MySQL 數據庫 復 制到新服
務器
mysqldump –add-drop-table –extended-
insert –force –log-error=error.log
-uUSER -pPASS OLD_DB_NAME | ssh -C
user@newhost “mysql -uUSER -pPASS
NEW_DB_NAME”
通過壓縮的 SSH 隧道 Dump 一個 MySQL 數據
庫,將其作為輸入傳遞給 mysql 命令,我認為
這是遷移數據庫到新服務器最快最好的方法。
SSH命令,15 、 刪除 文本文件中的一行, 修復 “SSH 主
機 密 鑰 更 改 ” 的 警 告
sed -i 8d ~/.ssh/known_hosts
16 、從一有 臺沒有 SSH-COPY-ID 命令 的主機
將 你的 SSH 公 鑰 復 制到服務器
cat ~/.ssh/id_rsa.pub | ssh user@machine
“mkdir ~/.ssh; cat >>
~/.ssh/authorized_keys”
如果你使用 Mac OS X 或其 它沒有 ssh-
copy-id 命令的*nix 變種,這個命令可以將
你的公鑰復制到遠程主機,因此你照樣可以實
現無密碼 SSH 登錄。
17 、 實時 時 SSH 網絡 吞吐 量測試
yes | pv | ssh $host “cat > /dev/null”
ssh用法,通過 SSH 連接到主機,顯示實時的傳輸速度,
將所有傳輸數據指向/dev/null,需要先安裝
pv。
如果是 Debian:
apt-get install pv
如果是 Fedora:
yum install pv
(可能需要啟用額外的軟件倉庫)。
18 、如 果 建 立 一個可以 重 新 連 接的 遠程 程 GNU
screen
ssh -t user@some.domain.com
/usr/bin/screen –xRR
()命令,人們總是喜歡在一個文本終端中打開許多
shell , 如 果 會 話 突 然 中 斷 , 或 你 按 下 了
“Ctrl-a d”,遠程主機上的 shell 不會受
到絲毫影響,你可以重新連接,其它有用的
screen 命 令 有 “ Ctrl-a c” ( 打 開 新 的
shell)和“Ctrl-a a”(在 shell 之間來回
切換),請訪問
禁用 root 用戶登錄前,確認普通用戶可以以 root 身份登錄。例如,允許用戶 vivek 使用 sudo 命令以 root 身份登錄。
在 Debian/Ubuntu 系統中如何將用戶 vivek 添加到 sudo 組中
允許 sudo 組中的用戶執行任何命令。 將用戶 vivek 添加到 sudo 組中:
$ sudo adduser vivek sudo
ssh使用?使用 id 命令 驗證用戶組。
$ id vivek
在 CentOS/RHEL 系統中如何將用戶 vivek 添加到 sudo 組中
在 CentOS/RHEL 和 Fedora 系統中允許 wheel 組中的用戶執行所有的命令。使用 usermod 命令將用戶 vivek 添加到 wheel 組中:
$ sudo usermod -aG wheel vivek
$ id vivek
測試 sudo 權限并禁用 ssh root 登錄
測試并確保用戶 vivek 可以以 root 身份登錄執行以下命令:
$ sudo -i
$ sudo /etc/init.d/sshd status
$ sudo systemctl status httpd
添加以下內容到 sshd_config 文件中來禁用 root 登錄:
PermitRootLogin no
ChallengeResponseAuthentication no
PasswordAuthentication no
UsePAM no
所有的密碼登錄都應該禁用,僅留下公匙登錄。添加以下內容到 sshd_config 文件中:
AuthenticationMethods publickey
PubkeyAuthentication yes
CentOS 6.x/RHEL 6.x 系統中老版本的 sshd 用戶可以使用以下設置:
PubkeyAuthentication yes
默認狀態下,所有的系統用戶都可以使用密碼或公匙登錄。但是有些時候需要為 FTP 或者 email 服務創建 UNIX/Linux 用戶。然而,這些用戶也可以使用 ssh 登錄系統。他們將獲得訪問系統工具的完整權限,包括編譯器和諸如 Perl、Python(可以打開網絡端口干很多瘋狂的事情)等的腳本語言。通過添加以下內容到 sshd_config 文件中來僅允許用戶 root、vivek 和 jerry 通過 SSH 登錄系統:
AllowUsers vivek jerry
當然,你也可以添加以下內容到 sshd_config 文件中來達到僅拒絕一部分用戶通過 SSH 登錄系統的效果。
DenyUsers root saroj anjali foo
你也可以通過配置 Linux PAM 來禁用或允許用戶通過 sshd 登錄。也可以允許或禁止一個用戶組列表通過 ssh 登錄系統
你需要明確禁止空密碼賬戶遠程登錄系統,更新 sshd_config 文件的以下內容:
PermitEmptyPasswords no
為密匙使用強密碼和短語的重要性再怎么強調都不過分。暴力破解可以起作用就是因為用戶使用了基于字典的密碼。你可以強制用戶避開字典密碼并使用約翰的開膛手工具來檢測弱密碼。以下是一個隨機密碼生成器(放到你的 ~/.bashrc 下):
genpasswd() {local l=$1[ "$l" == "" ] && l=20tr -dc A-Za-z0-9_ < /dev/urandom | head -c ${l} | xargs
運行:
genpasswd 16
輸出:
uw8CnDVMwC6vOKgW
你需要更新 iptables/ufw/firewall-cmd 或 pf 防火墻配置來為 ssh 的 TCP 端口 22 配置防火墻。一般來說,OpenSSH 服務應該僅允許本地或者其他的遠端地址訪問。
Netfilter(Iptables) 配置
更新 /etc/sysconfig/iptables (Redhat 和其派生系統特有文件) 實現僅接受來自于 192.168.1.0/24 和 202.54.1.5/29 的連接,輸入:
-A RH-Firewall-1-INPUT -s 192.168.1.0/24 -m state --state NEW -p tcp --dport 22 -j ACCEPT
-A RH-Firewall-1-INPUT -s 202.54.1.5/29 -m state --state NEW -p tcp --dport 22 -j ACCEPT
如果同時使用 IPv6 的話,可以編輯 /etc/sysconfig/ip6tables (Redhat 和其派生系統特有文件),輸入:
-A RH-Firewall-1-INPUT -s ipv6network::/ipv6mask -m tcp -p tcp --dport 22 -j ACCEPT
將 ipv6network::/ipv6mask 替換為實際的 IPv6 網段。
Debian/Ubuntu Linux 下的 UFW
UFW 是 Uncomplicated FireWall 的首字母縮寫,主要用來管理 Linux 防火墻,目的是提供一種用戶友好的界面。輸入以下命令使得系統僅允許網段 202.54.1.5/29 接入端口 22:
$ sudo ufw allow from 202.54.1.5/29 to any port 22
BSD PF 防火墻配置
如果使用 PF 防火墻 /etc/pf.conf 配置如下:
pass in on $ext_if inet proto tcp from {192.168.1.0/24, 202.54.1.5/29} to $ssh_server_ip port ssh flags S/SA synproxy state
ssh 默認監聽系統中所有可用的網卡。修改并綁定 ssh 端口有助于避免暴力腳本的連接(許多暴力腳本只嘗試端口 22)。更新文件 sshd_config 的以下內容來綁定端口 300 到 IP 192.168.1.5 和 202.54.1.5:
Port 300
ListenAddress 192.168.1.5
ListenAddress 202.54.1.5
當需要接受動態廣域網地址的連接時,使用主動腳本是個不錯的選擇,比如 fail2ban 或 denyhosts。
TCP wrapper 是一個基于主機的訪問控制系統,用來過濾來自互聯網的網絡訪問。OpenSSH 支持 TCP wrappers。只需要更新文件 /etc/hosts.allow 中的以下內容就可以使得 SSH 只接受來自于 192.168.1.2 和 172.16.23.12 的連接:
sshd : 192.168.1.2 172.16.23.12
netfilter 和 pf 都提供速率限制選項可以對端口 22 的傳入速率進行簡單的限制。
以下腳本將會阻止 60 秒內嘗試登錄 5 次以上的客戶端的連入。
#!/bin/bash
inet_if=eth1
ssh_port=22
$IPT -I INPUT -p tcp --dport ${ssh_port} -i ${inet_if} -m state --state NEW -m recent --set
$IPT -I INPUT -p tcp --dport ${ssh_port} -i ${inet_if} -m state --state NEW -m recent --update --seconds 60 --hitcount5
在你的 iptables 腳本中調用以上腳本。其他配置選項:
$IPT -A INPUT -i ${inet_if} -p tcp --dport ${ssh_port} -m state --state NEW -m limit --limit 3/min --limit-burst 3 -jACCEPT
$IPT -A INPUT -i ${inet_if} -p tcp --dport ${ssh_port} -m state --state ESTABLISHED -j ACCEPT
$IPT -A OUTPUT -o ${inet_if} -p tcp --sport ${ssh_port} -m state --state ESTABLISHED -j ACCEPT
# another one line example
# $IPT -A INPUT -i ${inet_if} -m state --state NEW,ESTABLISHED,RELATED -p tcp --dport 22 -m limit --limit 5/minute --limit-burst 5-j ACCEPT
用戶可以通過 ssh 連入服務器,可以配置一個超時時間間隔來避免無人值守的 ssh 會話。 打開 sshd_config 并確保配置以下值:
ClientAliveInterval 300
ClientAliveCountMax 0
以秒為單位設置一個空閑超時時間(300秒 = 5分鐘)。一旦空閑時間超過這個值,空閑用戶就會被踢出會話。更多細節參見如何自動注銷空閑超時的 BASH / TCSH / SSH 用戶。
參考鏈接 :
版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。
工作时间:8:00-18:00
客服电话
电子邮件
admin@qq.com
扫码二维码
获取最新动态