书生大模型实战营第4期——入门篇1 Linux

本文参考实战营提供的教程:Tutorial/blob/camp4/docs/L0/linux

ssh连接配置

终端连接

首先创建开发机,并选择适合的配置:

接下来等待开发机创建完成,并且点击"ssh连接"获取连接命令:

复制登录命令:

打开cmd终端输入登录命令,并且输入对应的密码:

登录界面如下:

登录命令的解释如下:

shell 复制代码
ssh -p 38089 root@ssh.intern-ai.org.cn -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null
  1. ssh: 这是用于安全外壳协议(SSH)的命令行工具,用于远程登录到另一台计算机。
  2. -p 38089: 这个选项指定了 SSH 连接所使用的端口号。在这个例子中,SSH 连接将通过端口 38089,而不是默认的端口 22。
  3. root@ssh.intern-ai.org.cn : 这里的 root 是要登录的用户名,ssh.intern-ai.org.cn 是目标主机的域名或 IP 地址。也就是说,命令的目的是以 root 用户身份登录到 ssh.intern-ai.org.cn 这台服务器。
  4. -o StrictHostKeyChecking=no : 这个选项用于配置 SSH 客户端的行为。StrictHostKeyChecking=no 表示在连接到新主机时,不会检查主机密钥的有效性。这意味着如果是第一次连接到该主机,SSH 客户端不会提示用户确认主机密钥,从而自动接受它。这在某些情况下可能会带来安全风险,因为它可能允许中间人攻击。
  5. -o UserKnownHostsFile=/dev/null : 这个选项指定了 SSH 客户端存储已知主机密钥的文件。在这个例子中,/dev/null 表示不存储任何已知主机密钥。这意味着每次连接时,SSH 客户端都不会记住之前连接的主机的密钥信息。

note: 这条命令用于以 root 用户身份通过非默认端口(38089)连接到 ssh.intern-ai.org.cn 服务器,并且在连接时不进行主机密钥检查,也不保存已知主机的密钥信息。这种设置通常用于临时连接或自动化脚本,但在生产环境中使用时需要谨慎,以避免安全风险。

免密连接

在开发时,每次都输入密码比较麻烦,可以配置ssh key来跳过输入密码的步骤,首先生成ssh key:

shell 复制代码
ssh-keygen -t rsa

输入命令后一路回车,公钥和私钥都保存到~/.ssh下了。将公钥~/.ssh/id_rsa.pub配置到平台就能实现免密登录了:

重新使用ssh命令连接开发机:

也可以使用命令来拷贝密钥:

css 复制代码
ssh-copy-id -i ~/.ssh/id_rsa.pub -p 38089 user@remote_host

也可以手动拷贝到服务器上的 ~/.ssh/authorized_keys里。

bash 复制代码
ssh user@remote_host
mkdir -p ~/.ssh 
echo "your_public_key_content" >> ~/.ssh/authorized_keys chmod 600 ~/.ssh/authorized_keys 
chmod 700 ~/.ssh

vscode连接

首先安装ssh插件:

接下来点击显示器形状的远程开发机,点击+号创建新的连接:

输入以下命令配置ssh连接(-i需要额外添加,指定本地ssh密钥):

shell 复制代码
ssh -p 38089 root@ssh.intern-ai.org.cn -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null  -i  ~/.ssh/id_rsa

开发机的配置写入~/.ssh/config下了

javascript 复制代码
Host ssh.intern-ai.org.cn
  HostName ssh.intern-ai.org.cn
  Port 38089
  User root
  StrictHostKeyChecking no
  UserKnownHostsFile /dev/null
  IdentityFile ~/.ssh/id_rsa  

刷新后显示多了一台intern的开发机,点击连接:

此时可以免密登录,或者输入本地ssh的密码连接上vscode:

打开一个文件夹:

结果如下:

ssh端口映射

端口映射是一种网络技术,它可以将外网中的任意端口映射到内网中的相应端口,实现内网与外网之间的通信。通过端口映射,可以在外网访问内网中的服务或应用,实现跨越网络的便捷通信。

在开发应用时,尤其是在需要与外部系统进行交互的情况下,端口映射显得尤为重要。开发人员可以将开发机上的特定端口(如HTTP服务的80端口或HTTPS服务的443端口)映射到本地路。这样,外部用户或就可以通过访问指定的端口,直接与开发机上的应用进行交互。命令如下:

css 复制代码
ssh -p {开发机端口} root@ssh.intern-ai.org.cn -CNg -L {本地端口}:127.0.0.1:{服务器端口} -o StrictHostKeyChecking=no
  • ssh: 安全外壳协议,用于远程登录。
  • **-p **: 指定连接的端口号。
  • root@ssh.intern-ai.org.cn : 登录的用户名是 root,目标主机是 ssh.intern-ai.org.cn
  • -C: 启用数据压缩,提升传输效率。
  • -N: 不执行远程命令,只进行端口转发。
  • -g: 允许其他主机连接到本地转发的端口。
  • -L {本地端口}:127.0.0.1:{服务器端口}: 将本地的端口转发到远程主机的指定端口。
  • -o StrictHostKeyChecking=no: 禁用主机密钥检查,自动接受主机密钥。

为了测试端口映射,使用下面的hello脚本:

python 复制代码
import socket
import re
import gradio as gr
 
# 获取主机名
def get_hostname():
    hostname = socket.gethostname()
    match = re.search(r'-(\d+)$', hostname)
    name = match.group(1)
    
    return name
 
# 创建 Gradio 界面
with gr.Blocks(gr.themes.Soft()) as demo:
    html_code = f"""
            <p align="center">
            <a href="https://intern-ai.org.cn/home">
                <img src="https://intern-ai.org.cn/assets/headerLogo-4ea34f23.svg" alt="Logo" width="20%" style="border-radius: 5px;">
            </a>
            </p>
            <h1 style="text-align: center;">☁️ Welcome {get_hostname()} user, welcome to the ShuSheng LLM Practical Camp Course!</h1>
            <h2 style="text-align: center;">😀 Let's go on a journey through ShuSheng Island together.</h2>
            <h2 style="text-align: center;">😀 Hello~ 神弥悠 ~</h2>
            <p align="center">
                <a href="https://github.com/InternLM/Tutorial/blob/camp3">
                    <img src="https://oss.lingkongstudy.com.cn/blog/202410081252022.png" alt="Logo" width="50%" style="border-radius: 5px;">
                </a>
            </p>

            """
    gr.Markdown(html_code)

demo.launch()

安装gradio包:

ini 复制代码
pip install gradio==4.29.0

在浏览器的开发机里面运行命令:

此时打开http://127.0.0.1:7860/是看不到内容的:

需要配置端口映射,将远程的7860映射到本地的7860:

linux基础命令

基础命令: vim命令:

创建conda环境

创建一个test环境,并激活:

总结

以上就是入门篇Linux的三道作业。通过这些作业,我熟悉了开发机的创建与连接,掌握了端口映射的基本操作,了解了Linux的基本语法以及Conda的使用方法。在此过程中,我特别加强了对Vim编辑器的理解,虽然之前对Vim的命令模式不太熟悉,但通过这次学习,我已经能够灵活运用Vim进行文本编辑。加油~

相关推荐
致奋斗的我们44 分钟前
HAProxy介绍与编译安装
linux·汇编·数据库·mysql·青少年编程·haproxy·openeurler
waves浪游1 小时前
Linux基本指令(上)
linux·运维·服务器
不确定性确定你我1 小时前
`sh` 与 `bash` 的区别详解
linux·bash·运维开发
9毫米的幻想3 小时前
【Linux系统】—— 冯诺依曼体系结构与操作系统初理解
linux·运维·服务器·c语言·c++
leoufung4 小时前
vim 多个关键字高亮插件介绍
linux·编辑器·vim
Nerd Nirvana7 小时前
软考—系统架构设计(案例 | 论文)
linux·系统架构·软件工程·软考·计算机基础
勤奋的凯尔森同学8 小时前
webmin配置终端显示样式,模仿UbuntuDesktop终端
linux·运维·服务器·ubuntu·webmin
打不了嗝 ᥬ᭄13 小时前
Linux的权限
linux
落幕13 小时前
C语言-进程
linux·运维·服务器
深度Linux13 小时前
C++程序员内功修炼——Linux C/C++编程技术汇总
linux·项目实战·c/c++