Вам уже должна быть знакома команда ssh, которая позволяет соединиться с другим компьютером и запустить на нем оболочку безопасным образом. Команда screen — полезный инструмент, позволяющий поддерживать такую сессию оболочки в ак-тивном состоянии, сохраняя содержимое экрана нетронутым, если вы разрываете соединение с удаленным компьютером. Сохраненная сессия оболочки может быть возобновлена позже, даже с другого компьютера. Кроме того, можно иметь два и бо-лее соединения во время одной и той же сессии оболочки.
Следующий сценарий устанавливает соединение ssh и начинает названную сес-сию экрана одной командой. Преимуществом использования этого сценария явля-ется более быстрое соединение и разъединение во время работы с множественными серверами.
Использование данного сценария во многом похоже на использование команды ssh. Синтаксис ssh, указывающий имя пользователя и имя хоста удаленной сессии, расширен до включения и имени сессии. Вы можете создавать множественные сес-сии на удаленных хостах под одним и тем же именем пользователя с различными именами сессий. Имя сессии указывать не обязательно. Если оно не задано, то сце-нарий выполняет команду ssh обычным образом, без запуска screen. Полный син-таксис этого сценария, включая поддерживаемые им параметры ssh, можно увидеть в комментариях.
Рекомендуемое имя сценария — ss.

#!/usr/bin/env bash # # Copyright © 2006 - Philip Howard - All rights reserved

# comnand ss (secure screen) # # purpose Establish a screen based background shell session # via secure shell communications. # # syntax ss [options] session/username@hostname # ss [options] session@username@hostname # ss [options] username@hostname/session # ss [options] username@hostname session # options -h hostname # -h-hostname # -i identity # -i=identity # -1 loginuser # -1-loginuser # -m Multi-display mode # -p portnum # -p=portnum # -s session # -s=session # -t Use tty allocation (default) # -T Do NOT use tty allocation # -4 Use IPv4 (default) # -6 Use IPv6 # -46 | -64 Use either IPv6 or IPv4 # # requirements The local system must have the OpenSSH package # installed. The remote system must have the # OpenSSH package installed and have the sshd # daemon running. It must also have the screen(l) # program installed. Configuring a .screenrc # file on each system is recommended. # # note The environment variable SESSION_NAME will be set # in the session created under the~screen command

I for potential use by other scripts.

while [[ $# -gt 0 ]]; do case "x${l}" in ( x*/*@* )

# Пример: sessionl/lisa@centrhub u=$( echo "x${l}" | cut -d @ -f l ) u="${u:1}"

s=$( echo "x${u}" | cut -d / -f 2 ) u=$( echo "x${u}" | cut -d / -f 1 ) u="${u:l}"
h=$( echo "x${l}" | cut -d @ -f 2 )
shift
break
(x*@*/* )

# Пример: lisa@centrhub/sessionl u=$( echo "x${l}" | cut -d @ -f 1 ) u="${u:l}"

h=$( echo "x${l}" | cut -d @ -f 2 )
s=$( echo "x${h}" | cut -d / -f 2 )
h-$( echo "x${h}" | cut -d / -f 1 )
h="${h:l}"
shift
break
( x*@*@* )

# Пример: sessional isa@centrhub s=$( echo "x${l}" | cut -d @ -f 1 ) s="${s:1}"

u=$( echo "x${l}" | cut -d @ -f 2 ) h=$( echo "x${l}" | cut -d @ -f 3 ) shift break
('x*@* )

# Пример: lisa@centrhub

u=$( echo "x${l}" | cut -d @ -f 1 ) u="${u:l}"
h=$( echo "x${l}" | cut -d @ -f 2 )

# Следующий аргумент должен быть именем shift

if [[ $# -gt 0 ]]: then s="${l}" shift
fi
break
( x-h=* ) h="${1:3}"
( x-h ) shift h="${l}"
( x-i-* ) i="${l:3}"
if [[ -z "${i}" ]]; then i-( ) else
i-( -i "$(1:3}" )
fi
( x-i ) shift i=( -i "${1}" )
(x-l=* | x-u=* ) u-'${l:3}"
( x-1 | x-u )
shift
j-"${1}"
( x-m | x--multi ) m=l
( x-p-* ) р="${1:3}"
if [[ -z "${p}" ]]: then p-( ) else
p=( -p "${1:3}" )
fi
( x-p ) shift
p-( -P "${1}" )
( x-s=* ) S="${1:3}"
('x-s )
shift
s="${l}"
( x-t ) t=( -t )
('x-T ) t-( )
( x-4 ) v=( -4 )
('x-6 )
v=( -6 )
С ' х-46 | х-64 ) v-( )
('х-* )
echo ..Invalid option: ,${1}'" die-1
('* )
echo "Invalid argument: '${1}'" d1e-l
esac shift
done #—

# Убеждаемся, что главная информация предоставлена. #

if [[ -z "${u}" ]]; then echo "User name is missing" die=l
fi
if [[ -z "${h}" ]]; then echo "Host name is missing" die-1
fi
[[ -z "$(die}" ]] || exit 1 #

# Запускаем screen на удаленном терминале, только если имя сессии получено. #- —

с=( ssh "${v[?]}" "${i[?]}" "${р[?]}" "${t[@]}" "${u}@${h}" ) if [[ -n "${s}" ]]: then o="-DR"
[[ -n "${m}" ]] && o="-x"
x="exec /usr/bin/env SESSION NAME='$(s}' screen ${o) '${s}'" c-( "${c[@]}" "${x}" )
fi
exec "${c[@]}"