前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >SSH远程连接服务安装与介绍

SSH远程连接服务安装与介绍

作者头像
全栈工程师修炼指南
发布2022-09-28 19:35:26
2.2K0
发布2022-09-28 19:35:26
举报

[TOC]

0x00 快速入门

SSH( Secure Shell ,安全外壳协议 )命令是openssh套件中的客户端连接工具,采用了非对称加密算法aymmetric encryption algorithm实现安全的远程登录服务器;

WeiyiGeek.ssh安全外壳协议
WeiyiGeek.ssh安全外壳协议

WeiyiGeek.ssh安全外壳协议

SCP(Secure Copy Protocol)Linux机器间的文件传递最简单最安全的方式scp命令

0x01 安装配置与安全配置

ssh服务安装:

代码语言:javascript
复制
sudo apt-get update
sudo apt-get install -y openssh-server

服务启动/自启设置:

代码语言:javascript
复制
service ssh start
/etc/init.d/ssh start

#kail-Deban自启服务
#update-rc.d ssh enable              #开启自启
#update-rc.d ssh disabled            #关闭自启

#chkconfig ssh on/off                   # Centos自启服务
#systemctl enable/disable sshd          # centos 7

#查看启动状态或者采用service
sudo ps -e |grep ssh

配置文件说明:/etc/ssh/sshd_config

代码语言:javascript
复制
#(1)基础配置
Port 22 # SSH 预设使用 22 端口,
Protocol 2,1 # 选择的 SSH 协议版本,如果要同时支持两者,就必须要使用 2,1 这个分隔了
#ListenAddress 0.0.0.0       #监听的来自主机网卡的所有请求
ListenAddress 192.168.0.100   #只监听来自 192.168.0.100 这个 IP 的SSH联机,如果不使用设定的话,则预设所有接口均接受 SSH
PidFile /var/run/sshd.pid   #可以放置 SSHD 这个 PID 的档案!左列为默认值
LoginGraceTime 600         # 当使用者连上 SSH server 之后,会出现输入密码的画面在多久时间内没有成功连上 SSH server ,就断线!时间为秒!
Compression yes           # 是否可以使用压缩指令 


#(2)关于 version 1 的一些设定
KeyRegenerationInterval 3600     # 由前面联机的说明可以知道, version 1 会使用 server 的 Public Key ,那么如果这个 Public 
                      # Key 被偷的话,岂不完蛋?所以需要每隔一段时间,来重新建立一次!这里的时间为秒!
ServerKeyBits 768             # Server key 的长度!


#(3)关于登录文件的讯息数据放置与 daemon 的名称
SyslogFacility AUTH # 当有人使用 SSH 登入系统的时候,SSH会记录资讯,这个信息要记录在什么 daemon name 底下?
#预设是以 AUTH 来设定的,即是 /var/log/secure 里面!
#Linux 基础其它可用的 daemon name 为:DAEMON,USER,AUTH, LOCAL0,LOCAL1,LOCAL2,LOCAL3,LOCAL4,LOCAL5,
LogLevel INFO   # 登录记录的等级!任何讯息!


#(4)安全设定项目
# 4.1登入设定部分
PermitRootLogin no     # 是否允许 root 登入!预设是允许的,但是建议设定成 no!
UserLogin no        # 在 SSH 底下本来就不接受 login 这个程序的登入!
StrictModes yes      # 当使用者的 host key 改变之后,Server 就不接受联机,可以抵挡部分的木马程序!

#说明主机的 Private Key 放置的档案,预设使用下面的档案即可
HostKey /etc/ssh/ssh_host_key    # SSH version 1 使用的私钥
HostKey /etc/ssh/ssh_host_rsa_key  # SSH version 2 使用的 RSA 私钥
HostKey /etc/ssh/ssh_host_dsa_key  # SSH version 2 使用的 DSA 私钥


# 4.2 认证部分
RhostsAuthentication no  # 本机系统不止使用 .rhosts ,因为仅使用 .rhosts 太 不安全了,所以这里一定要设定为 no !
IgnoreRhosts yes      # 是否取消使用 ~/.ssh/.rhosts 来做为认证!当然是!
RhostsRSAAuthentication no # 这个选项是专门给 version 1 用的,使用 rhosts 档案在# /etc/hosts.equiv配合 RSA 演算方式来进行认证!不要使用
HostbasedAuthentication no # 这个项目与上面的项目类似,不过是给 version 2 使用的!
IgnoreUserKnownHosts no  # 是否忽略家目录内的 ~/.ssh/known_hosts 这个档案所记录主机内容?当然不要忽略,所以这里就是 no 啦!

PasswordAuthentication yes       # 密码验证当然是需要的!所以这里写 yes 啰!
PermitEmptyPasswords no  # 若上面那一项如果设定为 yes 的话,这一项就最好设定 为 no ,这个项目在是否允许以空的密码登入!当然不许!
ChallengeResponseAuthentication yes  # 挑战任何的密码认证!所以,任何 login.conf 规定的认证方式,均可适用!
#PAMAuthenticationViaKbdInt yes      # 是否启用其它的 PAM 模块!启用这个模块将会导致 PasswordAuthentication 设定失效!
#RSAAuthentication yes   # 是否使用纯的 RSA 认证!?仅针对 version 1 !
PubkeyAuthentication yes   # 是否允许 Public Key ?当然允许啦!只有 version 2
AuthorizedKeysFile      .ssh/authorized_keys    # 上面这个在设定若要使用不需要密码登入的账号时,那么那个账号的存放档案所在档名!

# 4.3 与 Kerberos 有关的参数设定!因为我们没有 Kerberos 主机,所以底下不用设定!
KerberosAuthentication no
KerberosOrLocalPasswd yes
KerberosTicketCleanup yes
KerberosTgtPassing no
 
# 4.4 底下是有关在 X-Window 底下使用以及转发代理相关设定!
X11Forwarding yes
X11DisplayOffset 10
X11UseLocalhost yes

# 4.5 登入后的项目:
PrintMotd no     # 登入后是否显示出一些信息呢?例如上次登入的时间、地点等等,预设是 yes ,但是,如果为了安全,可以考虑改为 no !
PrintLastLog yes # 显示上次登入的信息!可以啊!预设也是 yes !
KeepAlive yes   # 一般而言,如果设定这项目的话,那么 SSH Server 会传送 KeepAlive 的讯息给 Client 端,以确保两者的联机正常!
          # 在这个情况下,任何一端死掉后, SSH 可以立刻知道!而不会有僵尸程序的发生!
UsePrivilegeSeparation yes # 使用者的权限设定项目!就设定为 yes 吧!
MaxStartups 10      # 同时允许几个尚未登入的联机画面?当我们连上 SSH ,尚未输入密码时,这个时候就是我们所谓的联机画面啦!
             # 在这个联机画面中,为了保护主机,所以需要设定最大值,预设最多十个联机画面,而已经建立联机的不计算在这十个当中

# 4.6 关于使用者抵挡的设定项目:
DenyUsers *        # 设定受抵挡的使用者名称,如果是全部的使用者,那就是全部 挡吧!若是部分使用者,可以将该账号填入!例如下列!
DenyUsers test
DenyGroups test      # 与 DenyUsers 相同!仅抵挡几个群组而已!

# 5. 关于 SFTP 服务的设定项目!
Subsystem      sftp    /usr/lib/ssh/sftp-server

ssh密匙认证 原理:密匙认证需要依靠密匙,首先创建一对密匙(包括pub公匙和pri密匙,并且用公匙加密的数据只能用密匙解密),并把公匙放到需要远程服务器上。这样当登录远程服务器时,客户端软件就会向服务器发出请求,请求用你的密匙进行认证。 服务器收到请求之后,先在你在该服务器的宿主目录下寻找你的公匙 authrozied_keys 和 knows_hosts,然后检查该公匙是否是合法,如果合法就用公匙加密一随机数(即所谓的challenge)并发送给客户端软件,客户端软件收到 “challenge”之后就用私匙解密再把它发送给服务器,因为用公匙加密的数据只能用密匙解密,服务器经过比较就可以知道该客户连接的合法性。

实验环境:

代码语言:javascript
复制
客户机:172.16.142.4
远端主机:172.16.142.5

Step1-修改配置文件(远端主机) 要使ssh既能够通过证书免密码登陆,又不影响通过用户名口令登陆,需要对远端主机ssh进行配置,配置文件为:/etc/ssh/sshd_config

代码语言:javascript
复制
RSAAuthentication yes  #ssh v1
PubkeyAuthentication yes  #ssh v2
ServerKeyBits 1024
PasswordAuthentication yes #关键点
PermitRootLogin yes
UsePAM no

配置完成后执行命令 service sshd restart 来重启ssh

Step2-本地生成密匙(客户机) 在客户机以root用户执行下述命令:

代码语言:javascript
复制
[root@localhost .ssh]# /usr/bin/ssh-keygen -t rsa -P 
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): 
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
# Your identification has been saved in /root/.ssh/id_rsa.  #私钥
# Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
30:f6:d7:2a:ac:56:eb:3f:fa:40:25:8d:90:96:68:cb root@localhost.localdomain

Step3-远程配置文件上传(远端主机)

代码语言:javascript
复制
[root@localhost .ssh]# scp /root/.ssh/id_rsa.pub root@172.16.142.5:/root/.ssh/authorized_keys
root@172.16.142.5 password:

#或者采用
ssh-copy-id root@172.16.142.5

说明:将公钥拷贝到远端主机,并写入授权列表文件,你也可以把公钥文件拷贝过去后,在远端主机下直接执行;

代码语言:javascript
复制
touch /root/.ssh/authorized_keys
cat /root/.ssh/id_rsa.pub >> /root/.ssh/authorized_keys

#操作完毕,登陆检查。 
[root@localhost ~]# ssh 172.16.142.5
Last login: Sat Dec 15 21:10:17 2007 from 172.16.142.4
[root@localhost ~]# 
无密码SSH登陆成功!

0x02 命令详细

ssh 命令

代码语言:javascript
复制
ssh [选项] host参数 '命令'
ssh root@ip

#选项
-1:强制使用ssh协议版本1;
-2:强制使用ssh协议版本2;
-4:强制使用IPv4地址;
-6:强制使用IPv6地址;
-A:开启认证代理连接转发功能;
-a:关闭认证代理连接转发功能;
-b:使用本机指定地址作为对应连接的源ip地址 #(代理转发使用)
-C:请求压缩所有数据;
-D: 指定绑定地址和端口 #(代理转发使用)
-F:指定ssh指令的配置文件;
-f:后台执行ssh指令;
-g:允许远程主机连接主机的转发端口;
-i:指定身份文件;
-l:指定连接远程服务器登录用户名;
-N:不执行远程指令;
-o:指定配置选项;
-p:指定远程服务器上的端口;
-q:静默模式;
-X:开启X11转发功能;
-x:关闭X11转发功能;
-y:开启信任X11转发功能。
-T: 表示不分配伪终端,但-T相当于notty,ctrl+C会中断会话

基础示例:

代码语言:javascript
复制
# 示例1.指定连接ssh的用户端口
ssh root@192.168.200.250 -p 2222

# 示例2.命令执行
ssh root@10.10.100.221 'hostname -I'
Secure login: unauthorized users are not allowed to access the system.
root@10.10.100.221 password:
10.10.100.221

# 示例3.指定密匙登录
ssh root@DROPLET_IP -i /path/to/private_key
#用户名为root私钥文件路径为~/test,用户名为ubuntu,服务IP为203.111.111.111
ssh -i ~/test ubuntu@203.111.111.111


# 示例4.ssh指定用户名和指定shell类型连接(类似于反弹shell-并且不记录命令)
ssh -l root 10.10.107.222 /bin/bash
# id
# uid=0(root) gid=0(root) groups=0(root)

# 示例5.循环命令执行
for i in {16..20};do
 ssh -p 20211 192.168.1.${i} 'wget http://192.168.1.1:8000/filebeatInstall.sh -O /tmp/filebeatInstall.sh && chmod +x /tmp/filebeatInstall.sh && cd /tmp/ && bash -c /tmp/filebeatInstall.sh'
done

# 示例6.端口映射转发示例
# 1) 监听本地10.10.107.242:8888端口,并将访问请求转发到10.22.0.3:80中
ssh -p 20211 -N -v -L 10.10.107.242:8888:10.22.0.3:80 root@10.10.107.242

ssh-keygen 命令 描述:生成公匙与密匙进行相应的认证

代码语言:javascript
复制
usage: ssh-keygen [-q] [-b bits] [-t dsa | ecdsa | ed25519 | rsa]
                  [-N new_passphrase] [-C comment] [-f output_keyfile]
       ssh-keygen -p [-P old_passphrase] [-N new_passphrase] [-f keyfile]
       ssh-keygen -i [-m key_format] [-f input_keyfile]
       ssh-keygen -e [-m key_format] [-f input_keyfile]
       ssh-keygen -y [-f input_keyfile]
       ssh-keygen -c [-P passphrase] [-C comment] [-f keyfile]
       ssh-keygen -l [-v] [-E fingerprint_hash] [-f input_keyfile]
       ssh-keygen -B [-f input_keyfile]
       ssh-keygen -D pkcs11
       ssh-keygen -F hostname [-f known_hosts_file] [-l]
       ssh-keygen -H [-f known_hosts_file]
       ssh-keygen -R hostname [-f known_hosts_file]
       ssh-keygen -r hostname [-f input_keyfile] [-g]
       ssh-keygen -G output_file [-v] [-b bits] [-M memory] [-S start_point]
       ssh-keygen -T output_file -f input_file [-v] [-a rounds] [-J num_lines]
                  [-j start_line] [-K checkpt] [-W generator]
       ssh-keygen -s ca_key -I certificate_identity [-h] [-U]
                  [-D pkcs11_provider] [-n principals] [-O option]
                  [-V validity_interval] [-z serial_number] file ...
       ssh-keygen -L [-f input_keyfile]
       ssh-keygen -A
       ssh-keygen -k -f krl_file [-u] [-s ca_public] [-z version_number]
                  file ...
       ssh-keygen -Q -f krl_file file ...

#参数解释
-a #当保存一个新格式的私钥(即ed25519密钥或设置-o标志时的任何SSH协议2密钥)时,此选项指定KDF的数量(增加碰撞难度)
-b #生成指定位数的密匙
-l #显示指定公钥文件的指纹支持私有RSA1密钥。对于RSA和DSA密钥ssh-keygen试图找到匹配的pub-并打印其指纹。如果与-v相结合则提供了密钥的可视ASCII艺术表示。
-p #交互模式输入密码
-o #Ed25519密钥总是使用新的私钥格式,使用新的OpenSSH格式保存私钥而不是更兼容的PEM格式。新格式增加了输入量抵抗暴力破解密码 ( 必须 > 6.5 版本)
-t #指定加密类型生不同类型的密钥: rsa / dsa / ECDAS /ed25519
-f #指定私钥文件文件路径
-y #此选项将读取专用OpenSSH格式文件,并将OpenSSH公钥打印到stdout。

实际案例:

代码语言:javascript
复制
#示例1.生成带密码的密匙登录认证(安全认证算法Key)
ssh-keygen -t dsa -P '123456' -f ~/.ssh/id_dsa   #(不需要交互执行)

ssh-keygen -t rsa -b 1024 -p  #命令行设置生成rsa密匙和交换式设置密匙密码 #(需要交互执行)
Enter passphrase (empty for no passphrase):
Enter same passphrase again:


#生成Ed25519算法的key
ssh-keygen -o -a 100 -t ed25519 -f ~/.ssh/id_ed25519 -C "john@example.com"

#示例2.命令行设置密匙密码并生成密匙
ssh-keygen -N "123456789"
ssh-keygen -P "123456789"

#示例3.终端密匙生成的目录文件
ssh-keygen -f /testdir/test/id_rsa

#示例4.根据私钥生成公钥如果密匙有密码则需要输入密码
ssh-keygen -f /testdir/test/id_rsa -y
ssh-keygen -f /testdir/test/id_rsa -y > id_rsa.pub


#示例5.当前认证公钥key加密算法及其强度
for key in ~/.ssh/id_*; do ssh-keygen -l -f "${key}" -v; done | uniq
# 2048 SHA256:pF71q3tXhtGx6EOIC/WZVKt/y9q5OCS2NviKlXVO1eY root@master (RSA)

scp 命令 描述: 注意 scp命令不会进行内容的追加而会覆盖整个文件

代码语言:javascript
复制
#语法:
scp [-r] 用户名@机器ip:文件路径 本地路径  # 下载文件或[文件夹]
scp [-r] 本地文件  用户名@机器ip:上传的文件路径  # 上传文件或[文件夹]

#参数
-r 表示目录
-P 指定端口(大写)

基础示例:

代码语言:javascript
复制
# 下载
$scp root@192.168.133.129:/root/index.html c:\\index.html   #注意Windows指定路径时候需要转义符号 

# 上传
$scp nssock2.zip root@192.168.133.129:/root

# 指定端口
$scp -P 18768 Architecture.c root@23.106.133.193:/root

# 覆盖已存储的文件
~$ echo 1024 > 1.txt
~$ scp -P 20211 1.txt weiyigeek@weiyigeek-108:~
**************WARNING**************
Authorized only. All activity will be monitored and reported.
1.txt     100%    5    13.2KB/s   00:00
~$ echo 1111 > 1.txt
~$ scp -P 20211 1.txt weiyigeek@weiyigeek-108:~
**************WARNING**************
Authorized only. All activity will be monitored and reported.
1.txt     100%    5    13.9KB/s   00:00
~$ ssh -p 20211 weiyigeek@weiyigeek-108 "cat 1.txt"
**************WARNING**************
Authorized only. All activity will be monitored and reported.
1111

ssh-add 命令 描述:

代码语言:javascript
复制
# (1) 加载私有密匙到 ssh-agent 密匙管理即默认采用此密钥进行访问操作
> ssh-agent zsh
> ssh-add ~/.ssh/id_develop

scp-copy-id 命令 描述:进行密匙的拷贝后面就能采用免密码登录;

代码语言:javascript
复制
#基础语法
/usr/bin/ssh-copy-id [-h|-?|-f|-n] [-i [identity_file]] [-p port] [[-o <ssh -o options>] ...] [user@]hostname

#参数
- i 指定认证文件
- o 指定ssh协议选项

基础示例:

代码语言:javascript
复制
#示例1.将生成的公匙存入到对端的机器的.ssh/authorized_keys
$ssh-copy-id -i /root/.ssh/id_rsa.pub root@10.10.107.234  #指定公匙文件
.ssh> ssh-copy-id root@10.10.107.221  #或者 cp id_rsa.pub authorized_keys
# .ssh> ssh 'root@10.10.107.221'
# Secure login: unauthorized users are not allowed to access the system.


#示例2.一步到位
cat ~/.ssh/id_rsa.pub | ssh -p 22 zsy@10.1.0.3 "umask 077;mkdir -p ~/.ssh;cat - >> ~/.ssh/authorized_keys"
#一般是把本地生成的密匙复制到远程主机上authorized_keys文件中
[root@slave ~]$cat .ssh/authorized_keys #同时记录连接的IP 
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAINDMnJ7QL1PXaWI63is2wqj9HG7Gc/AxT07F4RRujyPR ubuntu@WeiyiGeek
#将每个你访问过计算机的公钥(public key)都记录在~/.ssh/known_hosts [Centos]
[root@slave .ssh]# cat known_hosts
10.10.107.222 ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBJABL46Qd7sXwu/GW2+8KCNRfUXzh+6EGKnheq6+o+Uhp4PCt6M2/pMuV2mPfeIAsE/cYL1X0vYOtLrLG3Wjun0=


#当ssh服务器未使用默认端口号时,使用如下命令
centos6中:ssh-copy-id -i ~/.ssh/id_rsa.pub "zsy@10.1.0.3 -p 22222"
centos7中:ssh-copy-id -i ~/.ssh/id_rsa.pub zsy@10.1.0.3 -p 22222

使用 known_hosts 优缺点

  • 1.需要每次手动删除文件内容,一些自动化脚本的无法运行(在SSH登陆时失败),但是安全性高;
  • 2.SSH登陆时会忽略known_hsots的访问,但是安全性低;

0x03 进阶使用

0x04 补充说明

在ssh中设置登录提示信息 /etc/issue.net #远程登录信息显示 不支持转义字符 只支持普通文本.是否显示欢迎信息,由ssh的配置文件/etc/ssh/sshd_config决定 /etc/motd #本地或远程都可显示欢迎信息

代码语言:javascript
复制
#修改Terminal login时得提示: 在/etc/ssh/sshd_config添加“Banner /etc/ssh/ssh_login_banner” 或者 Banner /etc/issue
/etc/issue     #本地登录信息显示
\d : Show Current System 日期
\S : 名称
\l :登录时终端编号
\m :硬件体系架构
\n : 显示主机名
\o : 显示域名
\r : 显示内核kernel版本
\t : 显示当前时间
\u : 当前登录用户的序列号

实际案例:

代码语言:javascript
复制
echo "Authorized uses only. 您的所有活动均被监测和报告."> /etc/issue
echo "Authorized uses only. 您的所有活动均被监测和报告."> /etc/issue.net
echo "Authorized uses only. All activity may be monitored  and reported." >>/etc/motd
WeiyiGeek.issuenet
WeiyiGeek.issuenet

WeiyiGeek.issuenet

用SecureCRT进行免密码登陆 (1)将BT5生成的公私钥文件拷到windows本机上,打开SecureCRT新建session,配置服务器的基本信息后连接,当然这个时候是不会成功的。 (2)右键失败的session,选择“Session Options”—->”SSH2″—>”PublicKey”—>”Properties”后选择生成的私钥文件 选择完后,点击“ok”后,右键“Reconnect”即可成功登陆。

云服务器 SSH-KEY公匙/密匙登录 生成公匙和密匙:

代码语言:javascript
复制
#配置config文件,详细请参考从本地Linux机器登录到Linux云服务器(无公网IP)中的STEP1 /etc/ssh/ssh_config 文件
#找到ForwardAgent项,并设置为yes
chmod 400 私钥文件              #将您的私钥文件设置权限为400
eval `ssh-agent`                      #启动ssh-agent
ssh-add                                   #加载私钥
ssh -i 私钥文件 系统管理员@服务器IP       #对于ubuntu系统管理员为ubuntu;
ssh -i ~/test ubuntu@203.111.111.111          #centos,debian,suse用

利用公匙登录

代码语言:javascript
复制
/root/.ssh/authorizeb_keys      #将A机生成的.pub添加到authorizeb_keys
chmod 600 /root/.ssh/authorizeb_keys #新建文件权限加入600
/etc/init.d/start                 #启动secure shell

自定义SSH版本信息 描述:默认情况下telnet ip 22 端口会显示 openssh的版本信息

代码语言:javascript
复制
#搜索可执行文档和路径
$whereis sshd
sshd: /usr/sbin/sshd /usr/share/man/man8/sshd.8.gz

#替换二进制文件中的版本信息
cp /usr/sbin/sshd /usr/sbin/sshd2016.bak              #复制前需要进行备份
sed -i 's/OpenSSH_4.2/OpenSSH_8.2/g' /usr/sbin/sshd   #关键点
service restart sshd
    
$telnet 22端口测试banner信息

ssh避免首次登录服务时候需要输入yes,这时我们可以将StrictHostKeyChecking修改为no 方式1.配置文件

代码语言:javascript
复制
$vim /etc/ssh/ssh_config
Host *
        GSSAPIAuthentication yes
# If this option is set to yes then remote X11 clients will have full access
# to the original X11 display. As virtually no X11 client supports the untrusted
# mode correctly we set this to yes.
        ForwardX11Trusted yes
# Send locale-related environment variables
        SendEnv LANG LC_CTYPE LC_NUMERIC LC_TIME LC_COLLATE LC_MONETARY LC_MESSAGES
        SendEnv LC_PAPER LC_NAME LC_ADDRESS LC_TELEPHONE LC_MEASUREMENT
        SendEnv LC_IDENTIFICATION LC_ALL LANGUAGE
        SendEnv XMODIFIERS
        StrictHostKeyChecking no  关键点

方式2.命令行方式

代码语言:javascript
复制
# 首先连接主机并且不校验主机
ssh -oStrictHostKeyChecking=no root@weiyigeek

# 之后在主机和ip地址之间生成正确的映射
#!/bin/bash
for domain in "github.com" "bitbucket.org"; do
    sed -i "/$domain/d" ~/.ssh/known_hosts
    line=$(ssh-keyscan $domain,`nslookup $domain | awk '/^Address: / { print $2 ; exit }'`)
    echo $line >> ~/.ssh/known_hosts
done

0x05 入坑解救

问题1.ssh免密码登录Permission denied (publickey,gssapi-keyex,gssapi-with-mic)

解决: 首先修改/home/Hadoop/.ssh以及/home/Hadoop/.ssh/authorized_keys的权限; 172.16.142.4(客户端)

代码语言:javascript
复制
/home/root文件夹的权限是600
/home/root/.ssh文件夹的权限是600 (好像这个权限关系不是很大)
/home/root/.ssh/id_dsa私钥的权限600

172.16.142.5(远端主机)

代码语言:javascript
复制
chmod 700 /root/.ssh
chmod 644 /root/.ssh/authorized_keys  #注意后面放Public-KEY的英语不要打错

问题2.SSH修改端口报错 error: Bind to port xxx on 0.0.0.0 failed: Permission denied.解决方法

问题原因:Linux修改ssh Port端口后无法启动ssh访问,发现是SELinux导致的问题; 解决办法:

代码语言:javascript
复制
#(1) 永久方法 – 需要重启服务器修改/etc/selinux/config文件中设置
SELINUX=disabled

#(2) 临时方法 – 设置系统参数然后重启服务器,使用命令setenforce 0
setenforce 1 #设置SELinux 成为enforcing模式
setenforce 0 #设置SELinux 成为permissive模式

#重启sshd服务
systemctl restart sshd

注意:

  • 此时如果仍提示输入密码,请检查如下文件夹和文件的操作权限,这是非常重要的,否则ssh公钥认证体制不能正常工作
  • 还有可能是禁用了root登录出现这种情况,当切换到普通用户—Hadoop之后就又能登录了
WeiyiGeek.
WeiyiGeek.

WeiyiGeek.

总结: 出现这种警告,我觉得最终的原因是文件夹以及文件的读写权限的问题。

问题3.连接ssh时出现Unable to negotiate with 192.168.XX.XX port XXXX: no matching key exchange method found.错误。

问题信息:

代码语言:javascript
复制
$ ssh-copy-id gitlab@192.168.2.3
/usr/bin/ssh-copy-id: ERROR: Unable to negotiate with 192.168.2.3 port 22: no matching key exchange method found. Their offer: diffie-hellman-group1-sha1,diffie-hellman-group14-sha1

问题原因: 找不到匹配的密钥交换方法,需要配置为diffie-hellman-group1-sha1,diffie-hellman-group14-sha1

解决方法:

代码语言:javascript
复制
vi ~/.ssh/config
host 192.168.2.3
port 22
KexAlgorithms +diffie-hellman-group1-sha1,diffie-hellman-group14-sha1

问题4.在使用ssh tunnel时碰到channel 1018: open failed: administratively prohibited: open failed错误.

错误信息: channel 1018: open failed: administratively prohibited: open failed 问题解决:

代码语言:javascript
复制
/etc/ssh/sshd_config
AllowTcpForwarding yes
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-06-04,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 0x00 快速入门
  • 0x01 安装配置与安全配置
  • 0x02 命令详细
  • 0x03 进阶使用
  • 0x04 补充说明
  • 0x05 入坑解救
    • 问题1.ssh免密码登录Permission denied (publickey,gssapi-keyex,gssapi-with-mic)
      • 问题2.SSH修改端口报错 error: Bind to port xxx on 0.0.0.0 failed: Permission denied.解决方法
        • 问题3.连接ssh时出现Unable to negotiate with 192.168.XX.XX port XXXX: no matching key exchange method found.错误。
          • 问题4.在使用ssh tunnel时碰到channel 1018: open failed: administratively prohibited: open failed错误.
          相关产品与服务
          弹性公网 IP
          弹性公网 IP(Elastic IP,EIP)是可以独立购买和持有,且在某个地域下固定不变的公网 IP 地址,可以与 CVM、NAT 网关、弹性网卡和高可用虚拟 IP 等云资源绑定,提供访问公网和被公网访问能力;还可与云资源的生命周期解耦合,单独进行操作;同时提供多种计费模式,您可以根据业务特点灵活选择,以降低公网成本。
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档