VScode和SSH基础配置问题集合
Author:onceday date:2022年8月31日
本文记录linux的ssh和vscode开发环境搭建之路。
参考文档:
文章目录
- VScode和SSH基础配置问题集合
- 1.sshd的配置文件所在
- 2.生成公私秘钥
- 3.常规安装ssh-server
- 4.确定机器类型
- 5.下载vscode及插件
- 6.Linux账户问题
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
即可。
请注意,这两个文件ssh
和authorized_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软件呢?
一般可使用which
和whereis
来查找,which
查找PATH
路径下,whereis
的范围更大,即是这两个文件都查找不到,也不代表机器上未安装ssh,有可能只是安装到某些特殊的路径,并且不想被外人使用。
极端情况下可使用find 目录 -name 文件名
来进行大范围搜索。
如果不存在apt
和yum
等包管理软件,那么需要根据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远程连接。