VScode和SSH基础配置问题集合

Author:onceday date:2022年8月31日

本文记录linux的ssh和vscode开发环境搭建之路。

参考文档:

1.sshd的配置文件所在

/etc/ssh/sshd_config,在这文件里面,我们可以指定sftp服务的地址:

# override default of no subsystems
Subsystem       sftp    /usr/libexec/sftp-server

sftp-server服务可通过以下命令确定位置:

whereis sftp-server

如果没有该服务,那么可能需要下载安装该服务,不过正常安装ssh的时候应该都会带有该文件。

如果终端能ssh连接Linux,但是未能开启sftp服务,一般是sftp-server的地址填错了。

第二个需要修改的是:

# Authentication:

#LoginGraceTime 2m
PermitRootLogin yes
#StrictModes yes
#MaxAuthTries 6
#MaxSessions 10

允许root登入,有的linux默认是不允许,这里需要注意一下。

PubkeyAuthentication yes

# Expect .ssh/authorized_keys2 to be disregarded by default in future.
AuthorizedKeysFile      .ssh/authorized_keys .ssh/authorized_keys2

公钥允许登入也要打开,下面的是存放公钥的两个文件,在主目录~下面,文件的权限必须注意。

drwx------ 2 root root     4096 Aug 31 10:24 .ssh/

.ssh必须700权限,使用chmod 700 ~/.ssh即可。

-rw-r--r-- 1 root root  803 Aug 31 11:00 authorized_keys

authorized_keys文件必须不可执行,然后只有所属用户才有读入权限。

使用chmod 644 ~/.ssh/authorized_keys即可。

请注意,这两个文件sshauthorized_keys的权限必须满足以上固定要求,如果在配置无问题的情况,使用秘钥连接仍然需要密码,那么90%的情况下都是这两个文件的权限出了问题。

2.生成公私秘钥

使用命令:

ssh-keygen -t rsa -C "email@email.com"

ssh-keygen一般都是预装的,如果该命令不存在,请自行百度!

在windows下,公私秘钥位于:C:/用户/具体用户目录/.ssh/

在Linux下,公私秘钥位于:~/.ssh/

公钥文件名:id_rsa.pub,私钥文件名:id_rsa

请注意,如果生成公私钥的时候,指定了文件名,那么就不会是这两个名字了。其文件存放位置也可能放生变化。

需要把id_rsa.pub文件里面的文本内容复制到authorized_keys内,然后ssh就可以实现免密登入了。

终端可能需要指定使用ssh密钥登入来使用这种连接登入方式。

3.常规安装ssh-server

在某些发行版的linux上,不会默认开启ssh服务,比如高版本的ubuntu。

可按以下方式来常规安装openssh-server:

sudo apt-get update
sudo apt-get install openssh-server
sudo service ssh start
sudo vi /etc/ssh/sshd_config

请注意,sudo代表需要root权限。

如何确定系统上存不存在ssh软件呢?

一般可使用whichwhereis来查找,which查找PATH路径下,whereis的范围更大,即是这两个文件都查找不到,也不代表机器上未安装ssh,有可能只是安装到某些特殊的路径,并且不想被外人使用。

极端情况下可使用find 目录 -name 文件名来进行大范围搜索。

如果不存在aptyum等包管理软件,那么需要根据linux机器类型,自行从网上下载已编译好的执行程序,也可以是源码,但是需要编译,此时会需要更多的依赖文件。

如何下载第一个文件?在ssh失效,网络失效的情况,有效的方式可能是硬盘了,插上U盘来解决。

4.确定机器类型

命令行输入,set可查看当前的环境变量:

HOSTNAME=firewall
HOSTTYPE=aarch64
IFS=$' \t\n'
LINES=31
LOGNAME=root
MACHTYPE=aarch64-unknown-linux-gnu
MAILCHECK=60
OPTERR=1
OPTIND=1
OSTYPE=linux-gnu

其中摘录一部分。这里的系统是linux,架构是aarch64,其是ARMv8及以后处理器的一种执行状态,即64位寻址,包含异常模型、内存模型、程序员模型和指令集支持。

简而言之,aarch64 = arm64,在目前基本可以认为两者是相同。

arm64架构的描述常见于mac book PC。

aarch64架构的描述常见于linux PC。

诸如x86,AMD64,arm64等都是指令集体系结构(Instruction set architecture,ISA)的名称,ISA是对CPU及其配套设备的抽象模型。

在此模型上,即可抽象出汇编指令,汇编指令和ISA是息息相关的,对于一个编译的C语言,其成为汇编级别的抽象,因此只要ISA相同,可执行程序便可在同类系统中通用。

请注意,相同ISA的机器,其硬件也可能千差万别,因此硬件相关代码,其通用性更加受限。

5.下载vscode及插件

VScode市场链接:visual Studio Code Extensions marketplace

插件自行在以上市场搜索下载离线包,在扩展包的首页->Version History里,即可下载不同版本的离线包。

需要注意,C/C++包有机器类型的限制,但绝大多数包不存在版本限制。

如果机器类型是x86_64,就下载linux x64类型的包,如果是arrch64,则下载Linux ARM64的包。

Alpine Linux是一类和常见Linux不同的精简版Linux,因此不要选择Alpine Linux ARM64包,除非你清楚自己在做什么。

linux x64类型,获取vscode-server的下载,其是一个下载链接,地址为:

https://update.code.visualstudio.com/commit:b06ae3b2d2dbfe28bca3134cc6be65935cdfea6a/server-linux-x64/stable

其中:

commit:b06ae3b2d2dbfe28bca3134cc6be65935cdfea6a

是主机器上的vscode的提交信息,即主机vscode和服务器vscode-server的版本需要对应上。

在主机vscode上,导航栏的help -> about ->commit,显示为提交,需要将下载地址的commit:<对应版本的commit id>改成适合当前vscode版本的信息。

server-linux-x64是下载linux x64类型的包。对于aarch64,应该下载server-linux-arm64如果是32位系统,也要改成对应的数字。

linux aarch64/arm64,获取vscode-server的下载链接,地址为:

#下面是版本1.69.1
https://update.code.visualstudio.com/commit:b06ae3b2d2dbfe28bca3134cc6be65935cdfea6a/server-linux-arm64/stable
#下面是版本1.71.0
https://update.code.visualstudio.com/commit:784b0177c56c607789f9638da7b6bf3230d47a8c/server-linux-arm64/stable

下载的vscode-server-linux-arm64.tar.gz文件安装位置为服务器上的~/.vscode-server/bin/b06ae3b2d2dbfe28bca3134cc6be65935cdfea6a/目录下。

b06ae3b2d2dbfe28bca3134cc6be65935cdfea6a是对应版本的commit id

文件复制到~/.vscode-server/bin/b06ae3b2d2dbfe28bca3134cc6be65935cdfea6a/目录下。

需要首先创建该目录,然后复制文件到该目录下,然后执行命令:

cd ~/.vscode-server/bin/b06ae3b2d2dbfe28bca3134cc6be65935cdfea6a
tar -zxf vscode-server-linux-x64.tar.gz --strip-components 1 

这个代表解压并去掉外面一层目录,该步骤非常重要!

最终目录路径架构如下才对

onceday@ubuntu:/bin$ cd ~/.vscode-server/bin/b06ae3b2d2dbfe28bca3134cc6be65935cdfea6a/
onceday@ubuntu:~/.vscode-server/bin/b06ae3b2d2dbfe28bca3134cc6be65935cdfea6a$ ls
LICENSE  bin  extensions  node  node_modules  out  package.json  product.json  server.sh

插件的安装需要先离线下载,然后上传到服务器linux内,再在ssh远程连接的状态下使用本地安装方式进行安装。

6.Linux账户问题

部分linux环境可能存在某些特殊登入方式 ,如串口USART(serial),SPI,CAN,IIC等,这些属于硬件级别的通信概念。

如果提示root登入密钥验证不对,应首先确认root已设置密钥,在许多linux发行版本上 ,root在一开始的时候,是没有密码。

因此,可通过以下命令直接修改root密码:

passwd root

如果存在账号,但登入的shell不是常见的bash,sh,csh,zsh等,可通关以下命令查看账户信息:

root@unknow-host:~# cat /etc/passwd
admin:x:1007:1012::/home/admin:/usr/bin/nc-cli
securityadmin:x:1008:1013::/home/securityadmin:/usr/bin/nc-cli
useradmin:x:1009:1014::/home/useradmin:/usr/bin/nc-cli
auditadmin:x:1010:1015::/home/auditadmin:/usr/bin/nc-cli

可以看到,中间的数字是UID(user id)和GID(group id),一般用户的ID都大于1000,因为小数字的ID都被分配给各种系统和用户服务了,如sshd,www-data,dbus等。

admin,auditadmin等几个用户很惨,他们的shell被挟持到nc-cli去了,这是一个unknow-shell

修改用户登入shell很容易:

root@unknow-host:~# chsh -h
Usage: chsh [options] [LOGIN]

Options:
  -h, --help                    display this help message and exit
  -R, --root CHROOT_DIR         directory to chroot into
  -s, --shell SHELL             new login shell for the user account

先查看当前系统安装的shell信息:

root@unknow-host:~# cat /etc/shells 
/bin/sh
/bin/bash
/bin/ash #简化的bash版本,速度快

更改用户onceday的登入shell,路径必须给出完整路径:

chsh -s /bin/sh onceday

以下是账号管理的几个常见命令,谨记Linux账户管理是一个系统性的知识,需要积累和系统性学习

useradd -m user-name  #按照默认配置新建用户账号,并创建主目录文件夹/home/user-name
usermod -L user-name  #冻结用户账号,不允许他登入
usermod -U user-name  #解锁用户账号,允许登入
userdel [-r] user-name #删除用户账户信息,-r选项同时会删除/home/user-name下的内容

通过新建账号,服务器linux可供多个人开发,每个在自己/home/user-name目录下,建有私自的~/.ssh~/.vscode-server文件夹,各账号互不干扰,享受独立的ssh远程连接。

Logo

更多推荐