Saya memiliki yang berikut ini di .bash_profile di server jarak jauh saya:
if [ -z "${STY}" -a -t 0 -a X${USER} = Xarcege ]; then
reattach() {
if [ -n "${SSH_AUTH_SOCK}" ]; then
ln -snf "${SSH_AUTH_SOCK}" "${HOME}/.ssh/agent-script"
SSH_AUTH_SOCK="${HOME}/.ssh/agent-script" export SSH_AUTH_SOCK
fi
exec screen -A -D -RR ${1:+"$@"}
}
screen -wipe
echo 'starting screen... (type Ctrl-C to abort)'
sleep 5 && reattach
fi
Ini melakukan dua hal: pertama, mengatur fungsi shell untuk mengganti shell dan meneruskan koneksi ssh-agent, kedua memanggil fungsi setelah jeda selama beberapa detik (jika Anda tidak ingin layar mulai).
if
Klausa pertama akan benar jika layar yang belum berjalan ( -z "${STY}"
) terpasang ke terminal ( -t 0
) dan saya tidak menjalankan sudo (yang terkadang tidak berubah $USER
).
The reattach
Fungsi pertama akan memeriksa apakah ssh disebut dengan port ssh-agent aktif ( -n "${SSH_AUTH_SOCK}"
). Kemudian ia akan mengganti apa pun yang ada pada ~/.ssh/agent-script
file socket yang sedang aktif dan mengganti variabel environment ( $SSH_AUTH_SOCK
) dengan nilai baru. Kemudian skrip akan mengganti shell saat ini dengan satu screen
sesi (pastikan hanya ada satu yang ada). Setiap argumen ke reattach
fungsi diteruskan ke perintah ( ${1:+"$@"}
).
Bagian terakhir pertama menghapus setiap sesi mati ( screen -wipe
), membiarkan pengguna (saya) tahu bahwa layar akan segera dimulai dan sebaliknya dapat kembali ke shell dengan menekan Ctrl- C. Kemudian ia menunggu selama 5 detik dan memanggil reattach
fungsi.