Редактирование файлов через SSH на локальном Mac

Здравствуйте коллеги. Внесу свою лепту в коллективное сознательное.

Intro

Сегодня я расскажу про must–have инструмент для любого сисадмина или программиста.
К сожалению работает только на Mac, но если есть знаете решения под Win и Linux, то прошу добавлять их в комментарии.
Она позволяет открывать файлы на удаленных машинах через SSH для локального редактирования — rmate.
Набирая на удаленном сервере
<code class="bash">rmate /path/to/source</code>
Оффтопик: Редактирование файлов через SSH на локальном Mac

Мы получаем мгновенное редактирование в любимом TextMate 2

Оффтопик: Редактирование файлов через SSH на локальном Mac

Ну что, настроим?

Связка рабочая для Mac и *nix системами.
Последний build для Mac берем в официальном репозитории на github. Устанавливаем.
В составе пакета есть ruby скрипт посылающий редактируемый файл в обратную сторону через SSH туннель.
Сначала его надо добавить в любое место куда указывает $PATH в CentOS
<code class="bash">scp /Applications/TextMate.app/Contents/Frameworks/Preferences.framework/Versions/A/Resources/rmate example.com:/usr/local/bin</code>
Естественно меняем права на сервере
<code class="bash">chmod +x /usr/local/bin/rmate</code>
Теперь подключаемся через SSH с туннелем
<code class="bash">ssh -R 52698:127.0.0.1:52698 example.com</code>
Но я чтобы не писать каждый раз этот туннель прописываю его по умолчанию в ~/.ssh/config
<code class="bash"># ~/.ssh/config
RemoteForward 52698 127.0.0.1:52698</code>
И при запуске
<code class="bash">#порт опционален, так как по умолчанию он и вешается на 52698
rmate [-p port] /path/to/source </code>
Хитрый ruby скрипт отправляет содержимое файла на определенный порт, через туннель и на Textmate (ВНИМАНИЕ: Он должен быть запущен) который как раз слушает этот порт.
Done.

Troubleshooting

/usr/bin/env: ruby: No such file or directory
<code class="bash">sudo yum-install ruby</code>
Warning: remote port forwarding failed for listen port 52698
Это происходит (в 99% случаев) если сессия Textmate не была правильно закончена.

Солюшен номер раз
Решается через замену портов обмена:
<code class="bash">ssh -R <my-port-number>:localhost:52698 <user>@<server>
rmate -p <my-port-number> rmate_rocks.txt</code>
Солюшен номер два
<code class="bash">#Смотрим PID процесса на порте
sudo lsof -i :52698
#Kill it
kill PID
</code>
Солюшен номер три
Проблема решается сама по себе если повесить сам ssh и его туннели на autossh.

Все. Мы убрали кучу ненужных телодвижений. Теперь не нужно монтировать удаленные диски через fstub, sshfs или лезть через sftp over Cyberduck (sic!) и Transmit.

Вся файловая система как на ладони. Конфигурируй не хочу.


0 комментариев

Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.