Все используют то, что каждый находит лучше всего для данной задачи. Это является почти абсолютно отдельным, не может быть общего ответа.
Пользователи Linux не должны изучать операции оболочки вообще, если они не чувствуют себя подобно (и не становитесь вынужденными к некоторой ситуацией). И наоборот: можно выполнить все необходимые задачи с помощью только командную строку (никакие файловые менеджеры или графический интерфейсы пользователя даже). Все это зависит от того, для чего Вы (предназначают к) используете свою систему.
Я думаю, что это могло бы быть тем, что Вы ищете:
iptables -t nat -A PREROUTING -p tcp --dport 3306 -j DNAT --to <private ip>:3306
У меня есть подобная установка, но немного более сложный.
На моем домашнем ноутбуке у меня есть a /etc/xinetd.d/mysqlfwd
содержа
service mysqlfwd
{
type = UNLISTED
port = 3307 # could be 3306 as well if ther will never be a MySQL server installed here
socket_type = stream
protocol = tcp
wait = no
user = ports
server = /usr/local/bin/ports
server_args = -s mysql@<mydomain>
}
Это mysql@<mydomain>
обозначает подсистему SSH, определенную на сервере. Как mysql
не и не имеет, определенное имя подсистемы, я принял решение определить тот один с помощью (соответствующая Конвенция для Имен) [http://tools.ietf.org/html/rfc4250#section-4.6.1].
Используемый /usr/local/bin/ports
определяется как
#!/usr/bin/env python
def ssh(*args, **opts):
import subprocess
map= { False: 'no', True: 'yes' }
op = [ "-o%s=%s" % (k, map.get(v, v)) for k, v in opts.iteritems()]
args = op + list(args)
sp = subprocess.Popen(['ssh'] + args)
return sp
def ssh_conn(*args, **opts):
args = ['connect@myservernamehere', '-C' ] + list(args)
opts2 = dict(ControlPath='/tmp/ssh-%r@%h:%p')
opts2.update(opts)
return ssh(*args, **opts2)
def master():
sp = ssh_conn('-f', 'sleep', '15h', ControlMaster=True)
sp.wait()
def client(*args):
sp = ssh_conn(*args, **dict(ControlMaster=False))
sp.wait()
def main():
import sys
args = sys.argv[1:]
if not args:
master()
else:
client(*args)
if __name__ == '__main__':
main()
В упомянутом сервере существует названный пользователь connect
и, как сказано, названная подсистема mysql@<mydomain>
Последний определяется в /etc/ssh/sshd_config
со строкой
Subsystem mysql@<mydomain> /usr/bin/netcat localhost 3306
Пользователь connect
существует только, чтобы иметь платформу для работы, под рукой имеет, кроме принятия моего "ключа перенаправления портов" через ~/.ssh/authorized_keys
, никакие специальные функции, свойства или такой.
Таким образом, мой сервер может сохранить свой порт MySQL частным (не доступный снаружи), но у меня есть способ соединить его, тем не менее.