AWS SSH使用证书登录时出现:Permission denied (publickey). (之前能够连接,而现在却不能连接)问题解决

 aws  AWS SSH使用证书登录时出现:Permission denied (publickey). (之前能够连接,而现在却不能连接)问题解决已关闭评论
12月 062018
 

使用ssh -i /path/my-key-pair.pem ec2-user@public-dns-hostname
出现:Permission denied (publickey). 

出现这样的错误,先确认下手头的私钥pem文件确实对应自己的EC2实例。然后可以通过下面几个步骤排查:

1. 登录所使用的用户名是否正确?
正确的用户名如下所示:
对于 Amazon Linux 2 或 Amazon Linux AMI,用户名称是 ec2-user。
对于 Centos AMI,用户名称是 centos。
对于 Debian AMI,用户名称是 admin 或 root。
对于 Fedora AMI,用户名为 ec2-user 或 fedora。
对于 RHEL AMI,用户名称是 ec2-user 或 root。
对于 SUSE AMI,用户名称是 ec2-user 或 root。
对于 Ubuntu AMI,用户名称是 ubuntu。
另外,如果 ec2-user 和 root 无法使用,请与 AMI 供应商核实。
例如,要使用 SSH 客户端连接到从 Amazon Linux 实例,请使用以下命令:
ssh -i /path/my-key-pair.pem ec2-user@public-dns-hostname

2. 如果登录时还看到类似以下的错误:
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@         WARNING: UNPROTECTED PRIVATE KEY FILE!          @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Permissions 0777 for ‘.ssh/my_private_key.pem’ are too open.
It is required that your private key files are NOT accessible by others.
This private key will be ignored.
bad permissions: ignore key: .ssh/my_private_key.pem
Permission denied (publickey).

需要使用下面命令调整证书文件权限
[ec2-user ~]$ chmod 0400 .ssh/my_private_key.pem

3. 如果上面的步骤还是没解决问题,而且可能是之前能够连接,而现在却不能连接了,则可能是实例主目录的权限发生了更改。/home/ec2-user/.ssh/authorized_keys 的目录及文件权限必须限制为仅限所有者
具体操作如下(以 Amazon Linux 实例为例,用户名ec2-user):
chmod 600 /home/ec2-user/.ssh/authorized_keys
chmod 700 /home/ec2-user/.ssh
chmod 700 /home/ec2-user
(测试发现700权限的扩大到755也可以)

Done!!!

*******************************************************
附录1:打开AWS用户名密码登录方式,此处以root登录为例


1.首先 用密钥登陆 
2.给 root 设置密码 sudo passwd root
3.密码设置好后 切换到root用户 su root
4.修改ssh配置文件,允许密码登录
 vim /etc/ssh/sshd_config 
将 passwordAuthentication no 改为  passwordAuthentication yes
将PermitRootLogin 改为yes 此处表示允许root登录(当然如果使用其它用户登录可以保持这项为no,但记得赋予新用户有sudo权限方便修改恢复配置)

#其它参数说明:
# 是否让 sshd 去检查用户家目录或相关档案的权限数据,
# 这是为了担心使用者将某些重要档案的权限设错,可能会导致一些问题所致。
# 例如使用者的 ~.ssh/ 权限设错时,某些特殊情况下会不许用户登入
#StrictModes no

# 是否允许用户自行使用成对的密钥系统进行登入行为,仅针对 version 2。
# 至于自制的公钥数据就放置于用户家目录下的 .ssh/authorized_keys 内
#RSAAuthentication yes
#PubkeyAuthentication yes
#AuthorizedKeysFile      %h/.ssh/authorized_keys

5 重启 ssh service sshd restart

********************************************************
附录2:更新替换AWS密钥/证书(以 AWS ubuntu举例)


1.在aws后台生成并下载密钥,然后将密钥保存到自己电脑。

2.执行ssh-keygen -y,会提示要求输入密钥路径, 复制密钥路径,回车得到public key,例如
ssh-rsa AAAAB3NzaC1yc2EAAAADAQA231BAQCMASwerewg23XvhyGzydp0V234lP/fyfuhsHKMECZydc5ewytvTq0mqYTfjKBS++PeBpEL1Zx/ilEYCmgY6omTrIMtG8s1jf/lAk0l9++f2ldp/w2U86seARyRxVEexxxyuwJJDASDHNiEbshXQ6M49nUsE6tfETG3sFl+XDeva0lkNkssA4JDU+eivPRGma3XcBAXvsUsD8VkKQJvudrpJDSjjncdjYOVd2Wcrcj5Li8MmLvIkEX1pmqTT6O6oUfEtCdpVi4tCwTXV5ydU8UtjJDSGDFSJgbY9Unve4LgjgoWF677FdUpvVFD1NPoLH

3.利用以前的密钥/用户名密码登录服务器,将上面第二步的public key粘贴到~/.ssh/authorized_keys。 
比如: aws ubuntu系统默认用户名ubuntu位置在/home/ubuntu/.ssh/authorized_keys,如没有.ssh目录则新建目录, 
然后将旧的public key注释或者删除。

4.注意将上面3所在目录和文件修改为正确的权限
chmod 600 /home/ubuntu/.ssh/authorized_keys
chmod 700 /home/ubuntu/.ssh
chmod 700 /home/ubuntu

4.然后你就可以利用新的密钥文件(.pem后缀文件)登录服务器了 
例如:ssh -i /path/my-key-pair.pem ubuntu@public-dns-hostname

ssh如何通过跳板机直接访问到后端服务器(Mac&Linux&Windows解决方案)

 linux, ssh  ssh如何通过跳板机直接访问到后端服务器(Mac&Linux&Windows解决方案)已关闭评论
9月 212018
 

记录下,转自:https://my.oschina.net/foreverich/blog/657075

前言

如果公司的服务器在外网,一般会设置一个跳板机,访问公司其他服务器都需要从跳板机做一个ssh跳转,外网的服务器基本都要通过证书登录的。于是我们面临一个情况,本机ssh->跳板机->目标机器。如果直接在跳板机上放置公私钥对,并将跳板机上的公钥放到目标机器上,这样可以直接登录。但这样会有一个问题,跳板机上的root权限的用户可以获取普通用户的公私钥对,就算对私钥设置了密码,但是从安全角度来看,这样还是失去了保障,失去了服务器的一部分安全性。

如何来解决这个问题呢,其实ssh协议本身是支持秘钥转发的,不需要在跳板机上放置公私钥。

Linux(Mac)下有如下两种方式:

方式一:

从linux客户端的ssh跳转时,执行命令

ssh username@跳板机ip

然后在跳板机上跳转到目标机器

ssh username@目标机器ip

跳板机ip和目标机器ip,username账户下已经在相应的 .ssh/authorized_keys 加入了公钥,配置是没有问题了,但是我们会遇到一个Pubkey Unauthorization的错误,因跳板机没有username的私钥。问题总是会有,解决方法也总是有,ssh是有转发密钥的功能,从本机跳转到跳板机时可以把私钥转发过去。

正确做法是,在本机linux客户端执行命令 ssh -A username@跳板机ip

-A表示转发密钥,所以跳转到跳板机,密钥也转发了过来

接下来我们再在跳板机执行命令 ssh username@目标机器ip

另外可以配置本机客户端的默认配置文件,修改为默认转发密钥:

修改ssh_config(不是sshd_config,一般在/etc或者/etc/ssh下):

把 #ForwardAgent no 改为 ForwardAgent Yes

方式二:

ssh username@目标机器ip -p 22 -o ProxyCommand=’ssh -p 22 username@跳板机ip -W %h:%p’

也可以修改配置文件 ~/.ssh/config , 若没有则创建:

Host tiaoban #任意名字,随便使用 HostName 192.168.1.1 #这个是跳板机的IP,支持域名 Port 22 #跳板机端口 User username_tiaoban #跳板机用户 Host nginx #同样,任意名字,随便起 HostName 192.168.1.2 #真正登陆的服务器,不支持域名必须IP地址 Port 22 #服务器的端口 User username #服务器的用户 ProxyCommand ssh username_tiaoban@tiaoban -W %h:%p



Host 10.10.0.* #可以用*通配符 Port 22 #服务器的端口 User username #服务器的用户 ProxyCommand ssh username_tiaoban@tiaoban -W %h:%p

配置好后, 直接 ssh nginx 就可以登录 192.168.1.2 这台跳板机后面的服务器。 也可以用 ssh username@10.10.0.xx 来登录10.10.0.27, 10.10.10.33, …. 等机器。

windows SecureCRT密钥转发

windows下SecureCRT配置转发,需要做以下设置

输入图片说明

12月 092015
 

本机做代理机命令如下:

ssh -qTfnN -D 9999 lee@55.188.123.144

passwd: xxxx   输入密码

说明:

55.188.123.144 为远端可访问google的机器

lee为55.188.123.144登陆用户

9999为代理端口

q Quiet mode. 安静模式,忽略一切对话和错误提示。
T Disable pseudotty allocation. 不占用 shell 了。
f Requests ssh to go to background just before command execution. 后台运行,并推荐加上 n 参数。
n Redirects stdin from /dev/null (actually, prevents reading from stdin). f 推荐的,不加这条参数应该也行。
N Do not execute a remote command. 不执行远程命令,专为端口转发度身打造

代理设置如下: 

如firefox ->首选项 -> 网络设置 -> socks主机 : 127.0.0.1 端口:9999

10月 172014
 

记录下,模拟本机o-u-u用户在192.168.0.125机器上使用o-u-u用户ssh登陆时免密码登陆。

1        本机创建ssh密钥 

o-u-u@ubuntu:~$ ssh-keygen  -t rsa

按提示操作,提示密码时直接回车表示不设置密码。

 

2        拷贝密钥(第一步中产生的带.pub后缀的文件)到“被登陆机192.168.0.125

o-u-u@ubuntu:~$ scp      ~/.ssh/id_rsa.pub   o-u-u@192.168.0.125:~/.ssh/id_rsa.pub 

上传时需要输入密码。

3.   将id_rsa.pub添加到.ssh/authorzied_keys文件里。

 o-u-u@ubuntu:~$   cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys

4       ssh  o-u-u@192.168.0.125 这样就实现无密码登陆

注意:操作中可能还会不成功,大多是权限问题,按下面操作:

[ o-u-u@192.168.0.125 ~]$ chmod 700 /home/o-u-u/.ssh
[ o-u-u@192.168.0.125 ~]$ chmod 600 /home/o-u-u/.ssh/authorized_keys

切记不要将权限扩大为777,这样反而不能自动自动登陆

如何解决本地用户与远程用户不一致问题?

修改本地登录用户到~/.ssh/config文件,如果没有自己建一个,内容如下:

Host hostname1 

    user lili 

Host fili 

    user luoluo 

Host hostname 

    user nmnm

另一个更简单到方法

ssh-copy-id 是一个小脚本,可以使用这个脚本完成以上工作,这个脚本在linux系统里一般都有

9月 162014
 

以下描述过程:

操作系统: Linux (Ubuntu, Fedora) MacOSX
相关软件: SecureCRT

操作过程:

操作过程都在终端中执行.
Ubuntu 的破解 :

下载程序:

运行破解 /usr/bin/SecureCRT要填写真实的SecureCRT路径

 

破解完成

填写输出的注册信息, 并运行SecureCRT 查看注册信息:

查询破解信息

 

 

注: 程序只提供测试, 请测试完成后删除程序, 需要使用请购买正版软件, 谢谢.


破解过程中可能会出现这样的错误:

Insufficient privileges, please switch the root account. at ./securecrt_linux_crack.pl line 82.

即使切换到root也不行, 可以将目录下的SecureCRT文件cp到 /tmp目录下再运行pl脚本破解,破解后再copy回去

6月 192013
 

git push 时出现下面提示:

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@         WARNING: UNPROTECTED PRIVATE KEY FILE!          @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Permissions 0771 for '/home/ccc/.ssh/id_rsa' are too open.
It is recommended that your private key files are NOT accessible by others.
This private key will be ignored.
bad permissions: ignore key: /home/ccc/.ssh/id_rsa
Permission denied (publickey).
fatal: The remote end hung up unexpectedly

 

可试试通过下面命令解决:

cd ~/.ssh
chmod 700 id_rsa