ssh(无密码)登录linux及失败解决方案

使用vscode可视化调试ECU中提到,我最近一直在mac通过vscode登录到linux来进行代码开发。

一、vscode远程到linux上开发

  在vscode上装上Remote-SSH,并在linux上装vscode sever就可以在其他电脑上(mac,linux,windows)来无感的进行”远程开发了“。既然是通过ssh的方式登录到远程,默认就有两种方式了,一个是密码的方式,一个ssh公钥私钥的方式了,前者很简单,只要不要将sshd的密码登录禁用(默认不禁用),可以在linux/etc/ssh/sshd_config查看PasswordAuthentication获取是否禁用。

二、问题解决

  在四个月以前我就想通过vscode ssh私钥公钥的方式来登录linux,但是遇到了不少问题,当时开发任务又比较紧张,所以也就没有去折腾了。记得前段时间我们的一个服务器崩了,重装了系统了,在某天心血来潮,又试了一下,诶居然可以了。但是后面有一台服务器还是不行,因为有成功的案例,本着打破砂锅问到底的精神,某个空闲时间,又去折腾了一下,遇到问题才会学到自己忽略的知识点,经过这次折腾,总算弄懂了一点ssh登录的门道了。

1. 如何通过ssh公钥私钥登录

  如果没出意外,这个真的是巨简单,首先在自己的机器上通过ssh-keygen -t RSA -C yourname生成密钥,一路回车就好了。最终会生成一对公私钥在你的用户目录的.ssh下。
关于公私钥的位置:

1. windows:
2. mac:/Users/youraccount/.ssh
3. linux /home/youraccout/.ssh or ~/.ssh

  生成公私钥之后:
复杂模式:
1. 如果目标机器是mac或者linux就可以将公钥拷贝到目标机器上,然后通过cat id_rsa.pub >> xxxx/.ssh/authorized_keys,建议使用>>而不是>,前者是追加,后者是覆盖,有时有多个机器想连一个机器时,不可避免需要多个共存。xxxx代表是用户路径,比如/home/jinbao,如果是自己的独有的机器或者不怕被打,xxxx也可以是/root.
2. 如果目标机器是windows,就更简单了,在用户目录下的.ssh(没有就新建一个文件夹)下,新建一个authorized_keys文件,打开将前面生成的id_rsa.pub拷贝出来里面的内容,复制到authorized_keys,就ok了。

简单模式:
1. 直接执行ssh-copy-id target_host,然后输入密码,下次登录就不用再输入密码了。

  后面在自己的机器上(生成了密钥的机器上)通过ssh yourname@target host ip,会发现不用输入密码了。当然可以在各个系统上设置别名来缩短ssh的命令,比如我mac上的.bash_profile增加了alias sshironman='ssh ironman@172.20.1.1',后面我要登录ironman,就只需要输入sshironmman就好了。

2. 想个性自己ssh密钥路径

  ssh的密钥用处很多,可以用在git仓库,也可以用来加解密自己的秘密文件夹。为了安全或者方便管理,就想着git一套秘钥、登录linux一套密钥,但是默认路径只有一个,怎么办呢?
1. 更改每个公私钥的名字,更改加解密模块的配置
2. 指定不同的host用不同路径下的密钥。

  上面这个也是我在遇到问题最后总结出来的。如果要实现上述操作,可以在自己的机器上创建一个config文件。如下图所示:

ssh配置文件

图上含义解释:

  1. Host->可以理解为是一个标题,比如ssh 10.110.16.208等同于ssh jinbao@10.110.16.208,当然你可以把10.110.16.208换成任意的字符,eg:fuck.
  2. HostName->即目标机器的ip或者域名
  3. User->你在目标机器的用户名
  4. Idetiyfile->与公钥匹配的私钥,
  5. 还可以指定Port,不指定使用默认的22端口。

  由于私钥可以指定,所以就意味着我可以把我的密钥生成在能够访问到的任何地方
  如果机器是自己独占的,你还可以去折腾/etc/ssh/sshd_config,可以配置挺多玩法的,就看自己去摸索了。如果大家共用,记得先备份再折腾,折腾完记得复原,我就是忘记复原,被人逮住了。

3. 总是坎坷

只要遇到了问题,才能在简单操作中才能学到东西.

  如果不是在某台机器上登录失败了,我永远不会知道还能通过config指定私钥,也不会知道原来ssh还能通过打印信息来debug。先直接给解决方案吧:
1. 如果你发现弄完上面的第一步,依然还需要输入密码,那就看着改改/etc/ssh/sshd_config上的配置,比如指定authorized_keys,PubkeyAuthentication显示的设置为yes等操作
2. 上面不行,就将用户目录下的.ssh权限改为600->chmod 600 .ssh
3. 2不行,就将自己的用户目录改为600->chmod 600 /home/youraccount
4. 3不行,或者想知道怎么知道是2不行还是3不行的,都可以往下看。

解决上面的问题,我在网上查了很多资料,最后自己加工总结如下。
  解决上面问题的主要思路时,利用ssh程序自己输出的日志来定位问题,在服务器a(也就是自己的开发机器)和在目标机器(服务器b)上分别显式的、前台的运行ssh,然后可以跟着日志的过程来分析问题出在哪里。所以需要至少开两个窗口,最好开三个,其中两个通过密码登录到目标机器上,另一个通过ssh连接目标机器。
A窗口:通过ssh+passwd的方式登录进去,什么也不做---为了保险

B窗口:通过通过ssh+passwd的方式登录进去,然后:
1. sudo su
2. ssh service stop
3. /usr/sbin/sshd -ddebug方式运行sshdd

C窗口:ssh -v yourname@hostip,比如当时我是ssh -v jinbao@10.110.16.239

然后分别观察B窗口和C窗口打印的东西。如下所示,可以看到B窗口倒数第四行显示是权限问题,只要将上面提到的文件夹改成600 or 700 or 755,一般该文件夹为755,再来一遍,发现不用密码成功登录了,至于为什么那个文件夹会是其他权限,我就没去管了。其实C窗口过程也蛮有意思的,一开始使用id_rsa的私钥尝试一下,后面有用其他的尝试一下,直到所有的都不行,就告诉你用密码登录吧。一开始我以为是私钥的问题,我把过程中尝试的所有密钥都试了一遍,然后看到了B窗口的日志。。。。

```B窗口日志
root@nio:/home/jinbao# /usr/sbin/sshd -d
debug1: sshd version OpenSSH_7.2, OpenSSL 1.0.2g 1 Mar 2016
debug1: private host key #0: ssh-rsa SHA256:1sJu9KkQVl/GGTO6/iECw7XLev7tk+iK/DuHbyy1Y0M
debug1: private host key #1: ssh-dss SHA256:ASXArytwxggfDbf1gjuL1D4gRdNt58VlBh+hG9JcS3o
debug1: private host key #2: ecdsa-sha2-nistp256 SHA256:01M0FdZZcYtT+jYHI0SLdrwVChWR8jmMs4KPFcrZiKk
debug1: private host key #3: ssh-ed25519 SHA256:H69XeL/L7QtUxj85tedNm4YeBHFu6L5MZS3Quv0bjf0
debug1: rexec_argv[0]='/usr/sbin/sshd'
debug1: rexec_argv[1]='-d'
debug1: Set /proc/self/oom_score_adj from 0 to -1000
debug1: Bind to port 22 on 0.0.0.0.
Server listening on 0.0.0.0 port 22.
debug1: Bind to port 22 on ::.
Server listening on :: port 22.
debug1: Server will not fork when running in debugging mode.
debug1: rexec start in 5 out 5 newsock 5 pipe -1 sock 8
debug1: inetd sockets after dupping: 3, 3
Connection from 10.110.218.140 port 53227 on 10.110.16.239 port 22
debug1: Client protocol version 2.0; client software version OpenSSH_8.1
debug1: match: OpenSSH_8.1 pat OpenSSH* compat 0x04000000
debug1: Enabling compatibility mode for protocol 2.0
debug1: Local version string SSH-2.0-OpenSSH_7.2p2 Ubuntu-4ubuntu2.10
debug1: permanently_set_uid: 121/65534 [preauth]
debug1: list_hostkey_types: ssh-rsa,rsa-sha2-512,rsa-sha2-256,ecdsa-sha2-nistp256,ssh-ed25519 [preauth]
debug1: SSH2_MSG_KEXINIT sent [preauth]
debug1: SSH2_MSG_KEXINIT received [preauth]
debug1: kex: algorithm: curve25519-sha256@libssh.org [preauth]
debug1: kex: host key algorithm: ecdsa-sha2-nistp256 [preauth]
debug1: kex: client->server cipher: chacha20-poly1305@openssh.com MAC: <implicit> compression: none [preauth]
debug1: kex: server->client cipher: chacha20-poly1305@openssh.com MAC: <implicit> compression: none [preauth]
debug1: expecting SSH2_MSG_KEX_ECDH_INIT [preauth]
debug1: rekey after 134217728 blocks [preauth]
debug1: SSH2_MSG_NEWKEYS sent [preauth]
debug1: expecting SSH2_MSG_NEWKEYS [preauth]
debug1: SSH2_MSG_NEWKEYS received [preauth]
debug1: rekey after 134217728 blocks [preauth]
debug1: KEX done [preauth]
debug1: userauth-request for user jinbao service ssh-connection method none [preauth]
debug1: attempt 0 failures 0 [preauth]
debug1: PAM: initializing for "jinbao"
debug1: PAM: setting PAM_RHOST to "10.110.218.140"
debug1: PAM: setting PAM_TTY to "ssh"
debug1: userauth-request for user jinbao service ssh-connection method publickey [preauth]
debug1: attempt 1 failures 0 [preauth]
debug1: userauth_pubkey: test whether pkalg/pkblob are acceptable for RSA SHA256:6YbMfwVKZaQtvUroMXgxTn4qjvCSswzJU21eVfUtSJ8 [preauth]
debug1: temporarily_use_uid: 1003/1003 (e=0/0)
debug1: trying public key file /home/jinbao/.ssh/authorized_keys
debug1: fd 4 clearing O_NONBLOCK
Authentication refused: bad ownership or modes for directory /home/jinbao
debug1: restore_uid: 0/0
Failed publickey for jinbao from 10.110.218.140 port 53227 ssh2: RSA SHA256:6YbMfwVKZaQtvUroMXgxTn4qjvCSswzJU21eVfUtSJ8

<pre><code class="line-numbers">```C窗口日志
MBC02FC42FQ05P:~ tangjinbao$ ssh -v jinbao@10.110.16.239
OpenSSH_8.1p1, LibreSSL 2.7.3
debug1: Reading configuration data /Users/tangjinbao/.ssh/config
debug1: /Users/tangjinbao/.ssh/config line 9: Applying options for 10.110.16.239
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: /etc/ssh/ssh_config line 47: Applying options for *
debug1: Connecting to 10.110.16.239 [10.110.16.239] port 22.
debug1: Connection established.
debug1: identity file /Users/tangjinbao/.ssh/id_rsa type 0
debug1: identity file /Users/tangjinbao/.ssh/id_rsa-cert type -1
debug1: identity file /Users/tangjinbao/.ssh/id_dsa type -1
debug1: identity file /Users/tangjinbao/.ssh/id_dsa-cert type -1
debug1: identity file /Users/tangjinbao/.ssh/id_ecdsa type -1
debug1: identity file /Users/tangjinbao/.ssh/id_ecdsa-cert type -1
debug1: identity file /Users/tangjinbao/.ssh/id_ed25519 type -1
debug1: identity file /Users/tangjinbao/.ssh/id_ed25519-cert type -1
debug1: identity file /Users/tangjinbao/.ssh/id_xmss type -1
debug1: identity file /Users/tangjinbao/.ssh/id_xmss-cert type -1
debug1: Local version string SSH-2.0-OpenSSH_8.1
debug1: Remote protocol version 2.0, remote software version OpenSSH_7.2p2 Ubuntu-4ubuntu2.10
debug1: match: OpenSSH_7.2p2 Ubuntu-4ubuntu2.10 pat OpenSSH_7.0*,OpenSSH_7.1*,OpenSSH_7.2*,OpenSSH_7.3*,OpenSSH_7.4*,OpenSSH_7.5*,OpenSSH_7.6*,OpenSSH_7.7* compat 0x04000002
debug1: Authenticating to 10.110.16.239:22 as 'jinbao'
debug1: SSH2_MSG_KEXINIT sent
debug1: SSH2_MSG_KEXINIT received
debug1: kex: algorithm: curve25519-sha256@libssh.org
debug1: kex: host key algorithm: ecdsa-sha2-nistp256
debug1: kex: server->client cipher: chacha20-poly1305@openssh.com MAC: <implicit> compression: none
debug1: kex: client->server cipher: chacha20-poly1305@openssh.com MAC: <implicit> compression: none
debug1: expecting SSH2_MSG_KEX_ECDH_REPLY
debug1: Server host key: ecdsa-sha2-nistp256 SHA256:01M0FdZZcYtT+jYHI0SLdrwVChWR8jmMs4KPFcrZiKk
debug1: Host '10.110.16.239' is known and matches the ECDSA host key.
debug1: Found key in /Users/tangjinbao/.ssh/known_hosts:9
debug1: rekey out after 134217728 blocks
debug1: SSH2_MSG_NEWKEYS sent
debug1: expecting SSH2_MSG_NEWKEYS
debug1: SSH2_MSG_NEWKEYS received
debug1: rekey in after 134217728 blocks
debug1: Will attempt key: /Users/tangjinbao/.ssh/id_rsa RSA SHA256:6YbMfwVKZaQtvUroMXgxTn4qjvCSswzJU21eVfUtSJ8
debug1: Will attempt key: /Users/tangjinbao/.ssh/id_dsa
debug1: Will attempt key: /Users/tangjinbao/.ssh/id_ecdsa
debug1: Will attempt key: /Users/tangjinbao/.ssh/id_ed25519
debug1: Will attempt key: /Users/tangjinbao/.ssh/id_xmss
debug1: SSH2_MSG_EXT_INFO received
debug1: kex_input_ext_info: server-sig-algs=<rsa-sha2-256,rsa-sha2-512>
debug1: SSH2_MSG_SERVICE_ACCEPT received
debug1: Authentications that can continue: publickey,password
debug1: Next authentication method: publickey
debug1: Offering public key: /Users/tangjinbao/.ssh/id_rsa RSA SHA256:6YbMfwVKZaQtvUroMXgxTn4qjvCSswzJU21eVfUtSJ8
debug1: Authentications that can continue: publickey,password
debug1: Trying private key: /Users/tangjinbao/.ssh/id_dsa
debug1: Trying private key: /Users/tangjinbao/.ssh/id_ecdsa
debug1: Trying private key: /Users/tangjinbao/.ssh/id_ed25519
debug1: Trying private key: /Users/tangjinbao/.ssh/id_xmss
debug1: Next authentication method: password
jinbao@10.110.16.239's password:

上述只是发现了文件权限的问题,其实通过这个方法可以找出其他失败的原因,授人以渔,遇到其他问题,就看自己摸索了。

最后提醒,解决完了千万别忘记将服务器b(目标服务器)的ssh再启动起来

最后提醒,解决完了千万别忘记将服务器b(目标服务器)的ssh再启动起来

最后提醒,解决完了千万别忘记将服务器b(目标服务器)的ssh再启动起来

三、死里逃生

  我弄完成功之后,顺手就把b窗口给关了,然后发现ssh方式没法登录,突然意识到了问题的严重性,我已经做好了拿着显示器、键盘、鼠标去服务器边上,手动起来的准备了。然后我发现了属于我的A窗口,二话不说赶紧把ssh重新启动--service ssh start
因为我们的服务出过一次重大事故,所以我变得异常敏感,生怕再出幺蛾子,所以建议至少多开一个窗口备用哦,以免自己太高兴把窗口关了,然后被同事给揍了。

评论

  1. 2年前
    2022-5-05 17:04:00

    OhuqDVSHA

  2. 2年前
    2022-5-13 5:00:45

    DvfxKSPIYkNeGCw

  3. 2年前
    2022-5-24 18:29:55

    HjRNJIvsmEKnbq

  4. 2年前
    2022-6-21 15:11:17

    EhMnNYeIgfybU

  5. 2年前
    2022-7-12 18:47:08

    WZrMIuRkigYFsbH

  6. 2年前
    2022-7-12 18:47:24

    ANwngeRKScbLYuyP

  7. 2年前
    2022-7-20 4:53:20

    CIRLAbTzQEF

  8. 2年前
    2022-7-20 4:53:38

    HaUbsdfIpx

  9. 2年前
    2022-7-20 4:55:00

    tZRqjrWd

  10. 2年前
    2022-7-20 4:55:23

    OBfRuSMwEmiA

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇