ssh-agent key timeout dengan layar atau tmux pada bastion host

8

Biasanya saya menjalankan ssh-agent, saya ssh ke host bastion saya kemudian membuka sesi tmux dan terhubung ke kotak lain melalui itu. Penerusan kunci berfungsi untuk setiap sesi yang saya buka sejak saat itu.

Jika saya melanjutkan sesi tmux saya setelah menutup terminal, tidur laptop saya, apa pun, meneruskan kunci saya pada sesi benteng saya masih berfungsi, seperti halnya meneruskan pada sesi baru . Yang sudah ada tidak bekerja.

Saya memiliki sedikit hal di bashrc saya yang membuat penerusan kunci tetap berfungsi ketika saya melanjutkan tmux, tetapi saya mengalami kesulitan mencari tahu bagaimana membuatnya agar tetap bekerja untuk sesi yang terbuka dalam tmux.

Sebagai contoh, saya punya bastion01, dbhost01, dbhost02, webhost01, dan webhost02.

Jika saya membuka koneksi ke bastion01, mulai tmux di sana, dan kemudian terhubung ke dbhost01 dan webhost01 berfungsi meneruskan. Jika saya menutup koneksi itu, sambungkan kembali dan lampirkan sesi tmux saya yang ada, kemudian tambahkan koneksi ke dbhost02 dan webhost02, penerusan kunci berfungsi pada 02 kotak, tetapi tidak pada 01.

Tolong bantu!

Jericon
sumber

Jawaban:

11

Setiap kali Anda masuk bastion01, soket yang berbeda dibuka untuk menangani penerusan kunci. Anda dapat melihat nama file di variabel lingkungan SSH_AUTH_SOCK. Ketika Anda mulai tmux, nilai variabel lingkungan itu termasuk dalam tmuxlingkungan global, yang diwarisi oleh setiap shell yang dimulai pada sesi itu.

Sekarang, ketika Anda menghubungkan kembali bastion01nanti, soket yang berbeda dialokasikan untuk menangani penerusan kunci Anda (karena ini adalah sesi ssh baru). Anda dapat melihat ini dengan memeriksa nilai SSH_AUTH_SOCKsebelum Anda melampirkan kembali tmuxsesi Anda dan setelahnya. Agar penerusan kunci berfungsi di dalam tmux, Anda perlu memperbarui nilai bagian SSH_AUTH_SOCKdalam tmuxdengan nama soket yang digunakan oleh sesi ssh saat ini.

Cara cepat dan kotor untuk melakukan ini adalah dengan menulis skrip pendek yang akan menyimpan nilai baru ini ke file, dan jalankan di dalam tmuxjendela mana pun Anda berada ssh.

#!/bin/bash

echo "export SSH_AUTH_SOCK=$SSH_AUTH_SOCK" > ~/.auth_ssh

Jalankan skrip itu segera setelah Anda masuk bastion01, tetapi sebelum Anda melampirkan kembali ke sesi tmux Anda. Kemudian, sebelum Anda mencoba ssh di mana saja dari dalam tmux, jalankan yang berikut:

source ~/.auth_ssh

Setiap tmuxjendela memiliki lingkungannya sendiri, jadi Anda harus menjalankannya di setiap jendela tempat Anda mencoba menjalankan ssh. Untuk kesederhanaan, Anda dapat alias ssh untuk melakukannya untuk Anda:

alias ssh="source ~/.auth_ssh; ssh"

Catatan: ini adalah penyederhanaan berlebihan skrip yang kami gunakan di tempat kerja untuk memperbarui informasi otorisasi SSH. Jika tidak berfungsi dengan benar, saya harap ini setidaknya memberi Anda cukup informasi untuk google solusi yang lebih baik (atau orang lain memposting solusi yang lebih baik di sini).

chepner
sumber