首页 > 编程知识 正文

linux下ssh命令,ssh使用详解

时间:2023-05-03 12:32:00 阅读:167838 作者:2761

1、将SSH密钥复制到目标主机并打开无密码的SSH登录

ssh-copy-id user@host如果还没有密钥,请使用ssh-keygen命令

生成命令。

2、酷我Gambo主机的80个端口将打开到本地主机2001端口的隧道

sh-n-l 2001: localhost :80 some machine现在可以直接在浏览器中输入

http://localhost:2001访问此网站。

3、将你的麦克风输出到远程计算机的扬声器

来自麦克风端口的声音(如ddif=/dev/DSP|ssh-car cfour-c username @ hostd DOF=/dev/DSP )将成为ssh目标

从计算机的扬声器端口输出,但是很遗憾,音质不好,可以听到很多声音嘶哑。

4 .远距离和本地文件

sh user @ host cat/path/to/remote file|diff/path/to/local file比较本地文件和远程文件之间是否存在差异时

命令很有用。

5 .通过SSH装载目录/文件系统

shfs name @ server :/path/to/folder/path/to/mount/point可从http://fuse.source forge.net/sshfs.h

tml下载sshfs,以便可以通过网络安全地装载

个人目录。

6、通过中间主机建立SSH连接

ssh-t reachable _ hostsshunreachable _ host unreachable _ host不能从本地网络中删除

直接访问的主机,但可以通过reachable_host进行访问

在internet接入中,此命令用于

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中的配置

使用:

hosthostcontrolpath~~/. ssh/master-% r @ % h : % pcontrolmasterno到目标主机的所有ssh连接都将持续

SSH套接字,使用SSH定期同步文件时

(使用rsync/sftp/cvs/svn ),此命令

每次打开SSH连接时

将创建新套接字。

10、用SSH连接屏幕

sh-t remote _ host screenr直接连接到远程屏幕会话。 节约没用的父母

基本过程)。

11、端口检测(爆震) )。

单击kockhost 300040005000 ssh-pport user @ hostknockhost 500040030001端口上要打开服务的端口

例如SSH ),需要再敲一次关闭端口,先安全

安装知识文库。 以下是配置文件的示例:

[ options ] log file=/var/log/knockd.log [ OpenSSH ] sequence=3000,4000, 5000 seq _ time out=5command=/sxs dxn/iptables-a input-ieth0- s % IP %-ptcp-dport 22-jaccepttcpflags=syn [ clo iptables-dinput-ieth0- s % IP %-ptcp-dport 22-jaccepttcpflags=syn 12,删除

ssh-keygen -R the_offending_host在这些情况下,希望使用专业工具。

13、通过SSH执行复杂的远程外壳命令

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 -Cuser@newhost “mysql -uUSER -pPASSNEW_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/xsdxn/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 noChallengeResponseAuthentication noPasswordAuthentication noUsePAM no 禁用密码登录

所有的密码登录都应该禁用,仅留下公匙登录。添加以下内容到 sshd_config 文件中:

AuthenticationMethods publickeyPubkeyAuthentication yes

CentOS 6.x/RHEL 6.x 系统中老版本的 sshd 用户可以使用以下设置:

PubkeyAuthentication yes 限制用户的 ssh 访问

默认状态下,所有的系统用户都可以使用密码或公匙登录。但是有些时候需要为 FTP 或者 email 服务创建 UNIX/Linux 用户。然而,这些用户也可以使用 ssh 登录系统。他们将获得访问系统工具的完整权限,包括编译器和诸如 Perl、Python(可以打开网络端口干很多疯狂的事情)等的脚本语言。通过添加以下内容到 sshd_config 文件中来仅允许用户 root、vivek 和 丰富的曲奇 通过 SSH 登录系统:

AllowUsers vivek 丰富的曲奇

当然,你也可以添加以下内容到 sshd_config 文件中来达到仅拒绝一部分用户通过 SSH 登录系统的效果。

DenyUsers root saroj anjali foo

你也可以通过配置 Linux PAM 来禁用或允许用户通过 sshd 登录。也可以允许或禁止一个用户组列表通过 ssh 登录系统

禁用空密码

你需要明确禁止空密码账户远程登录系统,更新 sshd_config 文件的以下内容:

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

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

genpasswd() { local l=$1 [ "$l" == "" ] && l=20 tr -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 300ListenAddress 192.168.1.5ListenAddress 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 次以上的客户端的连入。

#!/xsdxn/bashinet_if=eth1ssh_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 300ClientAliveCountMax 0

以秒为单位设置一个空闲超时时间(300秒 = 5分钟)。一旦空闲时间超过这个值,空闲用户就会被踢出会话。更多细节参见如何自动注销空闲超时的 BASH / TCSH / SSH 用户。

参考链接 :

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。