То, что Вы описываете, точно кажется, что основное переименовывает для перезаписи файла.
Когда Вы переименовываете/перемещаете один файл сверху другого, старый файл является несвязанным. Значение файла все еще существует, но это больше не находится в дереве файловой системы. Таким образом старые приложения продолжат мочь получить доступ к файлу, пока они сохраняют его открытым. После того как все приложения закрыли старый файл, затем его на самом деле освобожденный на диске.
rename
системный вызов является атомарной операцией. Таким образом, чтобы сделать это Вы создали бы новый файл под другим именем и затем звонили бы rename
для переименования временного файла как того, Вы хотите заменить. Так как операция является атомарной, нет абсолютно никакого периода, где файл отсутствует. Это немедленно идет от старого файла до нового файла.
Отметьте, хотя это временный файл и заменяемый файл должно находиться на той же точке монтирования.
ProxyCommand очень полезен, когда хосты только косвенно доступны. С netcat это - относительный пролив вперед:
ProxyCommand ssh {gw} netcat -w 1 {host} 22
Здесь {gw} и {хост} являются заполнителями для шлюза и хоста.
Но также возможно, когда netcat не установлен на шлюзе:
ProxyCommand ssh {gw} 'exec 3<>/dev/tcp/{host}/22; cat <&3 & cat >&3;kill $!'
/dev/tcp является встроенной функцией стандартного удара. Файлы не существуют. Чтобы проверить, имеет ли удар эту функцию встроенное выполненное использование:
cat < /dev/tcp/google.com/80
... на шлюзе.
Чтобы удостовериться, что удар используется, используйте:
ProxyCommand ssh {gw} "/bin/bash -c 'exec 3<>/dev/tcp/{host}/22; cat <&3 & cat >&3;kill $!'"
И это даже сотрудничает с ControlMaster.
(Обновленный 22 октября для включения уничтожают для чистки второстепенной кошки) (Обновленный 3 марта 2011, чтобы сделать заполнителей более ясными и объяснить/dev/tcp)
100%-й кредит к roland schulz. Вот источник:
http://www.rschulz.eu/2008/09/ssh-proxycommand-without-netcat.html
посмотрите более полезную информацию в комментариях там.
Существует также больше здесь:
http://www.linuxjournal.com/content/tech-tip-tcpip-access-using-bash
http://securityreliks.securegossip.com/2010/08/enabling-devtcp-on-backtrack-4r1ubuntu/
ОБНОВЛЕНИЕ: вот что-то новое от Marco
В отношении ProxyCommand в ~/.ssh/config, где у каждого есть строка как это:
ProxyCommand ssh gateway nc localhost %p
Marco говорит:
Вам не нужен netcat при использовании последней версии OpenSSH. Можно заменить nc localhost %p с-W localhost: % p.
Результат был бы похож на это:
ProxyCommand ssh gateway -W localhost:%p
Дайте этому попытку:
ProxyCommand ssh -A -t gateway ssh -t steve@targetip
-t
в обоих соединениях и я видел его в неправильном. Я отредактировал свой ответ.
– Hauke Laging
08.07.2013, 09:48
Большой T, не мало t.
-T' Disable pseudo-tty allocation.
-t' Force pseudo-tty allocation.
Мой сценарий, используемый для возврата того сообщения, и, больше не делает.
/usr/bin/ssh -T -q -i $HOME/.ssh/one_command other_system
Я использую authorized_key
на other_system, чтобы заставить это выполнять команду:
from="my.mydomain.com",command="bin/remotely-run" ssh-rsa ...
Можно попробовать следующую технику ssh'ing в server1 с последующим ssh'ing в server2.
$ ssh -t user1@server1 ssh -t user2@server2
Делать это так, как это работает для меня.