[TOC]
0x00 快速入门
SSH( Secure Shell ,安全外壳协议 )命令是openssh套件中的客户端连接工具,采用了非对称加密算法aymmetric encryption algorithm实现安全的远程登录服务器;
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
#(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
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
用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.
总结: 出现这种警告,我觉得最终的原因是文件夹以及文件的读写权限的问题。
问题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
问题解决:
/etc/ssh/sshd_config
AllowTcpForwarding yes