工作第一步建立连接——ssh

照本宣科

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"

结果生成密钥对。会在 ~/.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 ~/.bashrc

source  activate
conda --version

conda 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博客

相关推荐
zzzzzz3106 小时前
9K Star 炸裂开源!这个 C 语言写的代码知识图谱,把 Linux 内核索引压缩到了 3 分钟
linux·服务器·sql
XIAOHEZIcode6 小时前
Linux系统鼠标偏移常见原因以及修复方案
linux·运维·游戏
用户0328472220701 天前
如何搭建本地yum源(上)
运维
大树884 天前
金刚石散热越强,管路越先见顶
大数据·运维·服务器·人工智能·ai
摇滚侠4 天前
Linux CentOS7 rpm 安装 MySQL 5.7
linux·运维·mysql
霸道流氓气质4 天前
领域驱动设计(DDD)在 Spring Boot 微服务中的实践指南
运维·spring boot·微服务
开发者联盟league4 天前
安装pnpm
ssh
小宇宙Zz4 天前
Maven依赖冲突
java·服务器·maven
Inhand陈工4 天前
基于台达PLC与映翰通IG502的智慧水产养殖精准投喂与远程运维解决方案
运维·人工智能·物联网·阿里云·信息与通信
酣大智4 天前
ARP代理--工作原理
运维·网络·arp·arp代理