1 、 复制 制 SSH 密 钥 到 目 标 主机,开 启 无 密 码SSH 登 录

ssh-copy-id user@host

如果还没有密钥,请使用 ssh-keygen 命
令生成。

2 、从 某的 主机的 80 端 口 开 启 到本 地 主机2001 端 口 的 隧 道

ssh -N -L2001:localhost:80 somemachine

现 在 你 可 以 直 接 在 浏 览 器 中 输 入
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 –

在比较本地文件和远程文件是否有差异时这
个命令很管用。

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 的连接。

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 进程)。

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>

在这种情况下,最好使用专业的工具。

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 命令,我认为
这是迁移数据库到新服务器最快最好的方法。

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 连接到主机,显示实时的传输速度,
将所有传输数据指向/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 用户登录前,确认普通用户可以以 root 身份登录。例如,允许用户 vivek 使用 sudo 命令以 root 身份登录。

在 Debian/Ubuntu 系统中如何将用户 vivek 添加到 sudo 组中

允许 sudo 组中的用户执行任何命令。 将用户 vivek 添加到 sudo 组中:

$ sudo adduser vivek sudo

使用 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

限制用户的 ssh 访问

默认状态下,所有的系统用户都可以使用密码或公匙登录。但是有些时候需要为 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

为 ssh 用户或者密匙使用强密码

为密匙使用强密码和短语的重要性再怎么强调都不过分。暴力破解可以起作用就是因为用户使用了基于字典的密码。你可以强制用户避开字典密码并使用约翰的开膛手工具来检测弱密码。以下是一个随机密码生成器(放到你的 ~/.bashrc 下):

genpasswd() {local l=$1[ "$l" == "" ] && l=20tr -dc A-Za-z0-9_ < /dev/urandom | head -c ${l} | xargs

运行:

genpasswd 16

输出:

uw8CnDVMwC6vOKgW

为 SSH 的 22端口配置防火墙

你需要更新 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 端口和绑定 IP

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 wrappers (可选的)

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

限制 TCP 端口 22 的传入速率(可选的)

netfilter 和 pf 都提供速率限制选项可以对端口 22 的传入速率进行简单的限制。

Iptables 示例

以下脚本将会阻止 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 用户。

参考链接 :

SSH 命令常见用法相关推荐

  1. unix和linux命令_Linux / Unix系统中SSH命令的用法

    unix和linux命令 Any security-minded Linux user will always use SSH protocol when connecting to servers. ...

  2. linux系统中ssh命令,Linux系统中SSH 命令的用法有哪些?

    今天小编要跟大家分享的文章是关于Linux系统中SSH命令的用法有哪些?一个系统管理员可能会同时管理着多台服务器,这些服务器也许会放在不同的地方.要亲自一台一台的去访问来管理它们显然不是最好的方法,通 ...

  3. dig命令命令常见用法

    dig命令命令常见用法 域名结构 dig命令命令常见用法 安装dig 查看本机使用的dns地址 使用dot或doh查询域名解析 查询A记录 查询dns所有记录值any 从ip地址反查询域名`dig - ...

  4. java 命令 jar_Javajar命令常见用法

    Java jar命令 常见用法 一.jar命令作用: 进行打包 -- 把多个文件打包成一个压缩包 -- 这个压缩包和Winzip的压缩格式是一样的. 区别在于jar压缩的文件默认多一个META-INF ...

  5. Linux——find命令常见用法

    转自:http://www.cnblogs.com/wanqieddy/archive/2011/06/09/2076785.html Linux中find常见用法示例 ·find path -opt ...

  6. netstat命令常见用法

    一.介绍 Netstat是控制台命令,是一个监控TCP/IP网络的非常有用的工具,它可以显示路由表.实际的网络连接以及每一个网络接口设备的状态信息.Netstat用于显示与IP.TCP.UDP和ICM ...

  7. linux中find命令列举,Linux find命令常见用法汇总

    Linux系统中查找文件的命令式find,find命令具有强大的功能,能够提供多种查找条件,下面小编就给大家带来Linux中find命令的常见用法汇总,一起来学习下吧. ·find path -opt ...

  8. 【Linux常用指令】grep命令常见用法

    grep命令简介 Grep用来搜索文本字符串的命令行命令,有如下的常见使用情景: 在文件中搜索字符串(pattern) 配合管道使用,将其他Linux命令的输出通过管道传输到grep grep的四个字 ...

  9. tmux命令常见用法

    tmux命令: 使用场景: 1.关闭终端,再次打开时原终端里的任务进程依然不会中断: 2.处在异地的两个人可以同时对同一个对话进行操作,并可以实时看到: 3.可以在单个屏幕的灵活布局下开出很多终端,然 ...

最新文章

  1. oracle vm virtualbox如何设置u盘启动_电脑自主U盘装机 如何设置U盘启动
  2. 2020年最新Java面试题免费下载!
  3. cookie的保存时间
  4. Bootstrap4+MySQL前后端综合实训-Day04-AM【新闻管理手机端页面+数据库操作(PowerDesigner 图形化数据库设计软件、SQLyog软件)】
  5. hdu2923 最短路floyd
  6. webstorm 内存溢出怎么弄_webstrom 内存溢出,软件崩溃卡死解决的方法
  7. mysql杨辉三角_两个经典的小例子:杨辉三角和水仙花
  8. 第14课 跳绳达人 《小学生C++趣味编程》
  9. UR5 IK group中遇到的问题
  10. 任一汉字在Unicode表中的顺序
  11. Java,Android 汉明窗 Hanmming
  12. 全国主要省会城市和地区手机离线地图数据文件下载地址
  13. undo歌词中文音译_Undo - Sanna nielsen帮我看看这歌词翻译对么
  14. 最优秀的开源库之GPUImage
  15. 54 小明的存钱计划
  16. 华为业务:组织架构和产品矩阵
  17. 漫谈自动化测试(一)——如何入门
  18. 编写Java程序,做一个MPG和L/100KM的转换器
  19. Android实现语音发送播放功能以及示例代码
  20. 【element ui --- DateTimePicker,有效时间不能晚于当前时间】

热门文章

  1. 数据分析:星巴克店铺分布有何规律?
  2. 计算机二级考试操作题outlook,2017年计算机考试二级考试操作题.doc
  3. pytorch梯度累积
  4. python编程首选_Java程序员值得探索的五种新编程语言,Python是首选?
  5. 2019计算机调剂困难,2019年研究生调剂困难程度远超想象
  6. uni保存canvas图片_小程序canvas【开箱即用】
  7. ppt恢复保存前的文件_文档忘记保存怎么恢复?断电导致文件丢失如何恢复?
  8. java随笔-扫描使用指定注解的类与方法
  9. 网络知识===wireshark抓包,三次握手分析
  10. 初笔,JAVA.HelloWorld代码详解