<?xml version="1.0"?>
<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www.wapforum.org/ DTD/wml_1.1.xml">

<wml>
<head>
<meta http-equiv="cache-control" content="max-age=180,private" />
</head>
<card title="ttyd网页ssh管理">
<p>
作者:<a href="index.php?action=showuser&amp;userid=1&amp;hash=">admin</a><br />时间:2024-02-15 21:20<br />分类:<a href="index.php?action=list&amp;cid=3&amp;hash=">电脑技术</a><br />内容:
ttyd网页ssh管理




Github：https://github.com/tsl0922/ttyd


安装教程：https://tsl0922.github.io/ttyd


纯 IPv6 服务器连接 SSH，需要本地网络支持 IPv6，或者连接支持 IPv6 的 VPS 连接通后使用。


ssh root@2400:xxx:xxx:xxx::xxx


# 指定端口


ssh root@2400:xxx:xxx:xxx::xxx -p5422


另外，可以通过 ttyd 实现网页 SSH，并且使用 cloudflare 打开代理，使支持 ipv4 和 ipv6，随时随地访问！


只需要 cloudflare 的二级域名打开小云朵即可，至于本机的ip地址可以通过路由实现动态更新或者本机安装动态更新程序。






# 1. 安装 ttyd




XML/HTML代码


    wget https://github.com/tsl0922/ttyd/releases/download/1.7.4/ttyd.x86_64 -O /usr/sbin/ttyd

    chmod +x /usr/sbin/ttyd







# 查看版本号




XML/HTML代码


    ttyd -v




也可以通过以下命令安装最新版本：






XML/HTML代码


    #获取最新版本

    VER=$( curl --silent &quot;https://api.github.com/repos/tsl0922/ttyd/releases/latest&quot;| grep '&quot;tag_name&quot;'|sed -E 's/.*&quot;([^&quot;]+)&quot;.*/\1/')

    #下载二进制文件：

    ##For 64-bit

    curl -LO https://github.com/tsl0922/ttyd/releases/download/$VER/ttyd.x86_64

    ##For aarch64

    curl -LO https://github.com/tsl0922/ttyd/releases/download/$VER/ttyd.aarch64

    ##For arm

    curl -LO https://github.com/tsl0922/ttyd/releases/download/$VER/ttyd.arm

    ##For i686

    curl -LO https://github.com/tsl0922/ttyd/releases/download/$VER/ttyd.i686




下载后，将文件移动到您的路径：




XML/HTML代码


    sudo mv ttyd.* /usr/local/bin/ttyd

    sudo chmod +x /usr/local/bin/ttyd





从源代码构建


在 Linux 上安装 ttyd 的另一种方法是从源代码构建它。在 Debian/Ubuntu 上，使用命令：






XML/HTML代码


    sudo apt-get install build-essential cmake git libjson-c-dev libwebsockets-dev

    git clone https://github.com/tsl0922/ttyd.git

    cd ttyd &amp;&amp; mkdir build &amp;&amp; cd build

    cmake ..

    make &amp;&amp; sudo make install





# 2. 测试


ttyd -W --ipv6 -p 2086 bash


# 使用支持 ipv6 的网络访问


http://[2400:xxx:xxx:xxx::xxx]:2086






# 3. 优化


# 3.1. 安全设置


ttyd -W --ipv6 -c user:password -p 2086 login


# -W 客户端可以输入，不然 shell 只能连接不能输入命令


# --ipv6 支持 IPv6 连接


# -c 客户端连接需要账号密码验证，格式为 用户名:密码


# -p 监听端口


# login 连接后需要系统登录才可使用 shell






# 3.2. 设置系统服务


# 新建服务






XML/HTML代码


    systemctl edit --force --full ttyd.service




# 粘贴以下内容，ctrl+x 点 y 回车保存退出




XML/HTML代码


    [Unit]

    Description=ttyd

    After=network.target

     

    [Service]

    ExecStart=/usr/sbin/ttyd -W --ipv6 -c user:password -p 2086 login

     

    [Install]

    WantedBy=multi-user.target





# 编辑 


# /etc/systemd/system/ttyd.service


# systemctl daemon-reload






# 3.3. 开机启动


# 设置自启


systemctl enable ttyd


systemctl start ttyd


systemctl status ttyd






# 3.4. 使用 nginx 反向代理


# 二级目录，可实际需要改根目录或其它路径






XML/HTML代码


    location ~ ^/ttyd(.*)$ {

        proxy_http_version 1.1;

        proxy_set_header Host $host;

        proxy_set_header X-Forwarded-Proto $scheme;

        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

        proxy_set_header Upgrade $http_upgrade;

        proxy_set_header Connection &quot;upgrade&quot;;

        proxy_pass http://127.0.0.1:2086/$1;

    }





# 3.5. 使用域名访问并套 cloudflare 打开代理，使支持 ipv4 和 ipv6 访问


https://www.example.com/ttyd






除了直接运行 shell 外，ttyd 还可以有很多有趣的玩法，例如：


启动一个容器使用ttyd作为跳板登录其他服务器：


docker run -it --rm -p 7681:7681 tsl0922/ttyd


如果你想给网页上的每个人开个 docker 容器玩，可以用下面的命令启动 ttyd，这样每次打开网页都会进入 docker 容器内的 shell：


ttyd docker run -it --rm ubuntu bash


如果你想一打开网页就能直接 ssh 到另一个机器上（省去进入 bash 再执行 ssh），可以这样启动 ttyd：


ttyd ssh root@192.168.1.1


你甚至还可以直接执行一个 vim，这样打开进入网页后就只有一个 vim 编辑器可以操作：


ttyd vim


</p><p>
<a href="index.php?action=login&amp;hash=">立即登陆发表评论</a><br />
</p>
<p><a href="index.php?action=list&amp;hash=">返回日志列表</a><br /><a href="index.php?action=index&amp;hash=">返回主页</a></p>
</card>
</wml>
