照本宣科
SSH(Secure Shell,安全外壳协议)是一种用于在不安全网络上进行安全远程登录和实现其他安全网络服务的协议.功能主要是远程登陆和文件传输(使用scp)
为了建立 SSH 远程连接,需要两个组件:客户端和相应服务端组件,SSH 客户端是我们安装在本地电脑的软件;而服务端,也需有一个称为 SSH 守护程序的组件,它不断地侦听特定的 TCP/IP 端口以获取可能的客户端连接请求。 一旦客户端发起连接,SSH 守护进程将以软件和它支持的协议版本作为响应,两者将交换它们的标识数据。如果提供的凭据正确,SSH 会为适当的环境创建一个新会话。
MacOS 系统自带 SSH 客户端,可以直接使用,Windows 系统需要安装 Xshell 客户端软件,大部分 Linux 发行版系统都自带 SSH 客户端,可以直接使用,可通过 ssh -V 命令查看当前系统是否有 SSH 客户端。
原理
本地向远程服务端发起连接 服务端随机生成一个字符串发送给发起登录的本地端 本地对该字符串使用私钥(~/.ssh/id_rsa)加密发送给服务端 服务端使用公钥(~/.ssh/id_rsa.pub)对私钥加密后的字符串进行解密 服务端对比解密后的字符串和第一次发送给客户端未加密的字符串,若一致则判断为登录成功
开始连接
给出的例子是ssh hello@microsoft.com -A,-A的作用是开启认证代理连接转发功能,-a则表示禁用。转发的对象是端口号,这样本地就可以使用服务器的服务,或者服务器使用本地的一些服务。
使用命令行的登陆需要每次输入账号和ip比较麻烦,所以可以使用配置文件一次性写好。以vscode中的新建ssh连接为例,安装好插件Remote-SSH,对SSH配置文件进行更新。配置文件有两种:
/etc/ssh/ssh.conf和
~/.ssh/config分别是系统级别和用户级别的配置,
配置方法完全一致,一般只会配置~/.ssh/config
文件,配置说明。
Host T4# 目标机的ip地址HostName xxx.xxx.xxx.xxx# 你目标机的用户名User username# 目标机登录端口Port 22
配置好之后就可以一键直连。
密钥
ssh还可以用来登陆git,生成key来免密码登陆git,
ssh-keygen -t rsa -C "codeideaai@gmail.com" -f "codeideaaigmailgithub"
-t rsa
:指定密钥类型为 RSA。之外还有ed25519类型的-C "codeideaai@gmail.com"
:为密钥添加注释,通常使用邮箱地址作为标识。-f "codeideaaigmailgithub"
:指定生成的公钥和密钥文件的名称。- 使用SSH-keygen生成GitHub密钥教程_ssh-keygen -t rsa -c-CSDN博客
结果生成密钥对。会在 ~/.ssh 生成两个文件:
codeideaaigmailgithub
:私钥文件,需要妥善保管,不要泄露。codeideaaigmailgithub.pub
:公钥文件,可以公开分享,用于添加到 GitHub 或其他需要 SSH 认证的服务中。
高级配置
高级体现在两点,一点是在服务器新建账号,一点是使用私钥公钥。
新建root账号,避免用户之间互相影响。
sudo adduser youraccount
sudo usermod -aG sudo youraccount
上面的配置文件虽然方便,但是还是需要每次输入密码。另外一种选择就是通过密钥进行认证,和github的认证一样。这里的username就是刚刚新建的root账号。
Host T4# 目标机的ip地址HostName xxx.xxx.xxx.xxx# 你目标机的用户名User username# 目标机登录端口Port 22
IdentityFile ~/.ssh/id_ed25519 # 私钥路径
IdentitiesOnly yes # 强制使用指定密钥
生成密钥之后,复制公钥存放在新建的root账号路径下:/home/xxxxx/.ssh/authorized_keys
权限设置:
chmod 700 /home/xxxx/.ssh
chmod 600 /home/xxxx/.ssh/authorized_keys
chown -R xxxx:xxxx ~xxxx/.ssh
登陆服务器后,就可以安装annaconda,安装虚拟环境,从git上面clone代码。clone也需要sudo ssh-keygen -t rsa生成密钥对,会存放在/home/xxx/.ssh/id_rsa 中。
为了从其他服务器scp拷贝,需要把其他服务器的公钥也追加放入authorized_keys,在新服务器上操作:
echo "ssh-ed25519 AAAAC3NzaC1... user@client1" >> ~/.ssh/authorized_keys
安装conda:
wget https://repo.anaconda.com/archive/Anaconda3-5.3.0-Linux-x86_64.sh
bash Anaconda3-5.3.0-Linux-x86_64.sh
最后配置环境变量
sudo vim ~/.bashrc
# 添加环境变量 ${USER} 用户名
export PATH=/home/${USER}/anaconda3/bin:$PATH
source ~/.bashrcsource activate
conda --versionconda create -n 环境名 python=3.12
添加源:
Conda换源_conda换清华源-CSDN博客
debug
调试可以加断点也可以打印log,但个人还是习惯打断点。在vscode中,安装了python debugger插件就可以实现打断点。难点在于launch.json的配置。本来vscode会自动生成一份文件,但是调试中断,这是文心一言加工后的:
{"version": "0.2.0","configurations": [{"name": "Python: 当前文件 (Conda)","type": "python", // 确保已安装 VS Code Python 扩展"request": "launch","program": "${file}","python": "${command:python.interpreterPath}", // 自动获取当前选中的解释器"console": "integratedTerminal","justMyCode": true, // 跳过库代码调试"cwd": "${workspaceFolder}", // 工作目录"env": {"PYTHONPATH": "${workspaceFolder}", // 可选:添加项目根目录到 PYTHONPATH"WANDB_MODE": "offline" // 可选:调试时禁用 wandb 在线同步},"args": [] // 可选:命令行参数,如 ["--arg1", "value1"]},{"name": "Python: 模块调试","type": "python","request": "launch","module": "your_module_name", // 替换为你的模块名(如 `train`)"python": "${command:python.interpreterPath}","console": "integratedTerminal"}]
}
reference:
1.Linux ssh 基础教程 - 我是唐青枫 - 博客园
2.https://zhuanlan.zhihu.com/p/614176659
3.pycharm EAP 构建出错_pycharm eap build expired-CSDN博客
4.SSH远程连接时报错提示Permission denied (publickey).的解决方法 - 角刀牛Java - 博客园
5.SSH公私钥免密连接远程服务器_ssh连接服务器 公私钥-CSDN博客