• [Azure - VM] 解决办法:无法通过SSH连接VM,解决错误:This service allows sftp connections only.


    本文主要针对 Azure VM 被锁住不能使用 SSH 登陆的解决办法。

    在Azure的虚拟机中,想创建一个SFTP用户且想限制这个SFTP用户只能访问固定的目录,于是对sshd_config进行修改,在配置文件中增加了 ChrootDirectoryForceCommand Match UserAllowTcpForwarding 設定。

    重启ssh服务后,造成所有User只能使用SFTP方式连接到VM,无法使用SSH连接到Server。


    问题描述:

    在Azure或者AWS误操作,禁用了SSH服务,造成不能连接到Server,出现如下警告信息:

    This service allows sftp connections only.

    [错误截图]


    尝试过程:

    #1、 尝试使用另外的机器通过sftp方式远程连接到这台无法连接的机器,想通过这种方式在修改sshd_config文件。 结果:最终失败

    操作过程是:先通过如下命令进行sftp连接,在一台机器上已经连接上了该机器,但是只能使用sftp的linux命令,无法使用ssh中的vim等命令编辑文件。最后sshd_config失败。

    sftp mysftp@192.168.0.1
    
    • 1

    #2、 尝试使用sftp工具连接到这台机器,之后替换sshd_config配置文件。结果:最终失败

    操作过程是:首先使用WinSCP连接到这台机器,之后访问路径/etc/ssh,之后尝试编辑sshd_config文件。我尝试了使用WinSCP和使用MobaXterm的sftp工具,都可以连接到这台机器,也都可以访问到/etc/ssh,但是无法进行编辑sshd_config文件,都提示:Permission denied。并且期间尝试使用已root权限的方式(sudo)连接,均已失败。


    #3、 尝试使用Azure portal中的RDP进行远程连接。结果:最终失败

    在Azure Portal中依次进入到Virtual machines,找到该机器,之后点击左侧菜单Connect,找到RDP页面,点击下载RDP文件,下载后的RDP文件点击连击。
    在这里插入图片描述


    #4、 尝试使用Azure portal中的跳板机Bastion进行远程连接。结果:最终失败

    操作步骤同上述#3,进入到Connect菜单后找到Bastion后,点击Use Bastion按钮,进行登陆,但是在跳板机窗口中进行连接的时候依然提示:This service allows sftp connections only. 错误,无法连接。

    在这里插入图片描述


    #5、 尝试使用Azure 虚拟机的 root用户进行登陆或者sftp登陆替换文件操作。结果:最终失败

    很遗憾Azure默认不会开启root用户给使用者,在操作之前也没有进行root的设定,查找了相关资料,都是默认没有开启root账号,需要人为设置root用户及密码。因为没有root用户,这个尝试最终失败。


    操作到这里的时候,心里凉凉了一半,感觉已经无力回天了,基本只剩下了,给Azure客服打电话,尝试重置虚拟机,或者新建一台虚拟机操作了。

    #6、 尝试给Azure客服打电话 / 或者起工单。未成功

    官方网站找到客服电话:400-886-6134,手机拨打的时候已经是晚上8点以后,超过客服服务时间,心里更将凉了。工单没有起,参照以前的经验,如果给Azure起工单,会花费非常久的时间后才会答复。


    #7、 尝试重新部署虚拟机。结果:最终失败

    同样在Azure portal中找到重新部署虚拟机服务,进行重新部署操作,重新部署成功,但是最终连接依然失败。因为Azure的重新部署服务会保留机器的配置和资源,这样你更改过的sshd_config文件并没有经过重新部署而重置更新。


    #8、 重新创建新的虚拟机,在移动出来里面的数据。可行,未操作

    多次尝试失败后,想到了最差的方式来处理,那就是重新创建虚拟机。

    大致的步骤是 step1:剥离出可插拔的硬盘disk。step2:备份出OS盘符下的有用数据。step3:删除既有的虚拟机(释放出当前endpoint的ip)。step4:创建新的虚拟机,并且关联原有endpoint的ip和可插拔的硬盘disk。step5:启动新虚拟机,进行mount挂载硬盘。

    首先此种方法是可行的,在之前有这样操作过,但是该过程影响较多,需要和team内进行沟通,评估影响,并且需要得到相关lead的approval。


    #9、 使用Azure的 Serial console操作。结果:成功

    在即将放弃的时候,找到了Azure 虚拟机里面的一个服务:Serial console,如下图,进入到后会提示输入用户名和密码,进入后和SSH连接vm几乎一模一样,最终使用vm重新设置sshd_config后成功开启SSH连接。
    在这里插入图片描述


    #10、 使用Azure的系统备份进行还原。结果:可行,未操作

    这个其实是我最早想到的方式,但是打开Azure portal后发现该虚拟机未开启自动备份功能,压根就没进行备份,非常之悲剧,所以这个在这次事件中未操作成功。但是如果你的机器有自动备份,那么可以利用恢复解决。


    最后总结:经历了这次的惊心事件后,自己非常反思了这件事情,还好Azure有自己的一个连接工具方式(第#9种),让你可以连接到VM里面,如果没有那么将要耗费精力来进行恢复。新的Azure机器一定要开启备份,建议在做一些有风险的操作的之前进行备份一次,出现问题可以还原回去。另外关于Azure的VM,可以考虑开启root用户。


    如果是AWS的EC2遇到了同样的问题可以参照:EC2 被鎖住不能使用 SSH 登入 怎麼辦?


    :本文原创由 bluetata 发布于https://bluetata.blog.csdn.net/、转载请务必注明出处。

  • 相关阅读:
    基于双二阶广义积分器的三相锁相环(DSOGI-PLL)Simulink仿真
    Error: EMFILE: too many open files : 往服务器一次性传输文件数太多
    kafka—消费者
    【元宇宙欧米说】众神时代——游戏与区块链结合,重构游戏产业新面貌
    微服务docker部署实战
    ConcurrentHashMap源码解析 1.内部结构
    RabbitMQ发送方确认机制
    如何写一个可以找到工作的简历不至于太烂
    Nacos 配置中心--多配置文件的优先级
    值得注意的: c++动态库、静态库、弱符号__attribute__((weak))以及extern之间的关系
  • 原文地址:https://blog.csdn.net/dietime1943/article/details/126867988