ssh登录的调试方法和常见问题

2024-09-01 07:32

本文主要是介绍ssh登录的调试方法和常见问题,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

ssh登录服务器是程序猿日常生活必不可少的一部分,也时不时的会遇到自己配置ssh登录的问题,拿日常使用的git来讲,不管使用github也好,还是自己搭建的gitlab等等,如果不能很好的理解ssh的原理,极容易遇到各种问题。这篇文章就尝试向大家简单讲解下ssh的原理、调试方式和常见问题。这里要讲的主要是免密码登录,也就是使用密钥登录的方式。

ssh基本原理

ssh密钥登录的原理简单来讲就是,你自己有一把钥匙和锁(私钥和公钥),服务器认可你这把锁孔,并把它装在了门上(服务器authorized_keys中),之后你就拿着这把钥匙就可以开门了。如果你有好多把钥匙,那么你得为每个门指定用哪个钥匙,在~/.ssh/config中配置即可。钥匙和锁的比喻虽然不是很恰当,但可以这么理解,容易记忆:)关于ssh的详情,大家可以参考SSH原理与运用。

总结下来,ssh密钥登录就下面3个步骤:

  1. 生成密钥对,执行如下命令,回车,可以自定义密钥名字,比如mykey,后面你会得到mykey和mykey.pub,前者是私钥(钥匙),后者是公钥(锁)。

    ssh-keygen -t rsa
    
  2. 将公钥交给服务器。你肯定是把锁给服务器,如果你把钥匙给服务器,是不是不太对??好多新手在这个问题上都会犯糊涂。这一步只要确保服务器端~/.ssh/authorized_key中有这个公钥就可以了,设置方式多样,不细说。

  3. 在本地配置服务器和密钥绑定,配置文件为~/.ssh/config中,如下:

    Host github.comIdentityFile ~/.ssh/mykeyUser git
    

当然你也可以在命令行指定使用哪个密钥,但这不是麻烦一些吗?!

ssh -i [path to private key] git@github.com

接下来,你应可以使用密钥登录服务器,如果还不行,你得看看下面的调试大法了。

ssh调试大法

发话不多说,直接上大法。

  1. 客户端调试

    ssh -vvv git@github.com
    

    是不是有一堆调试信息输出?!快去看看连接时候用的私钥对不对!

  2. 服务端调试

    /usr/sbin/sshd -d -p 2222
    

    在客户端去连接这个新端口

    ssh -vvv host -p 2222
    

此时两边都有日志输出,啥问题都能看到了!!

ssh常见问题

其实有了上面的调试大法,所有问题都能迎刃而解了,这里只记录下我碰到的一个问题。

问题描述

为新同事建立一个服务器登录帐号,使用如下命令:

useradd -d /home/test test

然后将其公钥放进 /home/test/.ssh/authorized_keys 中,之后test用户却无法登录服务器。

问题解决

首先,使用客户端调试大法,任何异常都没有发现,使用的私钥也是正确的,但是却无法连接。

接下来就服务端调试大法,发现异常,说是test用户不可用,处于锁定状态。

问题找到,原来直接创建用户后,如果不给它设定密码,用户就是锁定状态,无法使用。用户状态可以通过以下命令查看。

passwd -S test # 查看用户状态
passwd -l test # 锁定用户
passwd -u test # 激活用户

小结

出了问题不可怕,可怕的是没有定位问题的方法,想想马航搜救,东一头西一头,好可怕哦~

以后ssh登录遇到问题可以自己解决了吧?!不用谢!

这篇关于ssh登录的调试方法和常见问题的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


原文地址:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.chinasem.cn/article/1126315

相关文章

MySQL启动报错:InnoDB表空间丢失问题及解决方法

《MySQL启动报错:InnoDB表空间丢失问题及解决方法》在启动MySQL时,遇到了InnoDB:Tablespace5975wasnotfound,该错误表明MySQL在启动过程中无法找到指定的s... 目录mysql 启动报错:InnoDB 表空间丢失问题及解决方法错误分析解决方案1. 启用 inno

在Spring Boot中实现HTTPS加密通信及常见问题排查

《在SpringBoot中实现HTTPS加密通信及常见问题排查》HTTPS是HTTP的安全版本,通过SSL/TLS协议为通讯提供加密、身份验证和数据完整性保护,下面通过本文给大家介绍在SpringB... 目录一、HTTPS核心原理1.加密流程概述2.加密技术组合二、证书体系详解1、证书类型对比2. 证书获

Python函数返回多个值的多种方法小结

《Python函数返回多个值的多种方法小结》在Python中,函数通常用于封装一段代码,使其可以重复调用,有时,我们希望一个函数能够返回多个值,Python提供了几种不同的方法来实现这一点,需要的朋友... 目录一、使用元组(Tuple):二、使用列表(list)三、使用字典(Dictionary)四、 使

Linux查看系统盘和SSD盘的容量、型号及挂载信息的方法

《Linux查看系统盘和SSD盘的容量、型号及挂载信息的方法》在Linux系统中,管理磁盘设备和分区是日常运维工作的重要部分,而lsblk命令是一个强大的工具,它用于列出系统中的块设备(blockde... 目录1. 查看所有磁盘的物理信息方法 1:使用 lsblk(推荐)方法 2:使用 fdisk -l(

Java中的Closeable接口及常见问题

《Java中的Closeable接口及常见问题》Closeable是Java中的一个标记接口,用于表示可以被关闭的对象,它定义了一个标准的方法来释放对象占用的系统资源,下面给大家介绍Java中的Clo... 目录1. Closeable接口概述2. 主要用途3. 实现类4. 使用方法5. 实现自定义Clos

使用Python获取JS加载的数据的多种实现方法

《使用Python获取JS加载的数据的多种实现方法》在当今的互联网时代,网页数据的动态加载已经成为一种常见的技术手段,许多现代网站通过JavaScript(JS)动态加载内容,这使得传统的静态网页爬取... 目录引言一、动态 网页与js加载数据的原理二、python爬取JS加载数据的方法(一)分析网络请求1

MySQL查看表的最后一个ID的常见方法

《MySQL查看表的最后一个ID的常见方法》在使用MySQL数据库时,我们经常会遇到需要查看表中最后一个id值的场景,无论是为了调试、数据分析还是其他用途,了解如何快速获取最后一个id都是非常实用的技... 目录背景介绍方法一:使用MAX()函数示例代码解释适用场景方法二:按id降序排序并取第一条示例代码解

Python中合并列表(list)的六种方法小结

《Python中合并列表(list)的六种方法小结》本文主要介绍了Python中合并列表(list)的六种方法小结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋... 目录一、直接用 + 合并列表二、用 extend() js方法三、用 zip() 函数交叉合并四、用

Java 中的跨域问题解决方法

《Java中的跨域问题解决方法》跨域问题本质上是浏览器的一种安全机制,与Java本身无关,但Java后端开发者需要理解其来源以便正确解决,下面给大家介绍Java中的跨域问题解决方法,感兴趣的朋友一起... 目录1、Java 中跨域问题的来源1.1. 浏览器同源策略(Same-Origin Policy)1.

Java Stream.reduce()方法操作实际案例讲解

《JavaStream.reduce()方法操作实际案例讲解》reduce是JavaStreamAPI中的一个核心操作,用于将流中的元素组合起来产生单个结果,:本文主要介绍JavaStream.... 目录一、reduce的基本概念1. 什么是reduce操作2. reduce方法的三种形式二、reduce