Как сохранить файл в vscode-remote SSH с привилегиями пользователя без полномочий root

Я не могу сохранить файлы на моем удаленном сервере с помощью VSCode Remote SSH, потому что я не являюсь пользователем root.

Я следовал официальной документации о том, как настроить ssh с конфигурационным файлом SSH, но даже если у моего пользователя привилегии sudo, я не могу найти какие-либо опции в VSCode для сохранения с помощью sudo.

вот мой файл конфигурации SSH /Users/geoff/.ssh/config:

Host gcpmain
    User geoff
    HostName <IP_ADDRESS>
    IdentityFile ~/.ssh/gc_rsa

Очевидно, что когда я пытаюсь сохранить любые файлы, требующие sudo, у меня появляется это ожидаемое сообщение об ошибке:

Failed to save 'default': Unable to write file (NoPermissions
 (FileSystemError): Error: EACCES: permission denied, open 
'/etc/nginx/sites-available/default')

Есть ли способ заставить VSCode сохранить как sudo? Большое спасибо за ваши ответы!:)

12 ответов

Это расширение VSCode должно решить проблему: Сохранить как root в удаленном SSH

Установите расширение в окне, открытом с помощью Remote-SSH, и используйте «Сохранить как корневой» в палитре команд вместо Ctrl + S.

По сути, он читает содержимое редактора и вызывает команду sudo для перезаписи файла.

      sudo chown -R myuser /path/to/folder

У меня это сработало!

Я также столкнулся с той же проблемой при использовании vs code для ssh входа в CentOS с учетной записью без полномочий root.

Истинная причина является: Ваша учетная запись пользователя ("Джеф" здесь) необходимо получить разрешение каталога назначения первым.

sudo setfacl -R -m u:geoff:rwx /etc/nginx/sites-available/default

для вас случай.


Более общее использование:

sudo setfacl -R -m u:username:rwx /path/to/directory

Эта команда поможет вам получить разрешение каталога /path/to/directory, не влияя на разрешения любого другого пользователя или группы. Не рекомендую использовать chown.

Когда вы закончите выполнение вышеуказанной команды, вы можете редактировать и сохранять в VS-коде. Пусть это будет вам полезно.

Я столкнулся с тем же вопросом, когда пытался редактировать файлы conf nginx на моем VPS. На github есть открытая проблема: повысить права на удаленный SSH, решая аналогичные проблемы.

В качестве временного решения вы можете использовать WinScp - добавьте sudo / path / to / sftp-server в настройки вашего соединения, а затем вы можете сохранить изменения в большинстве (если не в любом) файле. WinScp использует sudo при входе в систему.

Самое простое решение для настройки файлов на удаленном компьютере с помощью VSCode ssh (я использую экземпляр Ubuntu EC2 с AWS) - это изменить права доступа к файлам во время работы с файлами с помощью chmod.

По умолчанию файлы конфигурации сервера (/etc / nginx / sites-available / default) доступны только для чтения (для записи / сохранения требуется sudo). Существуют открытые проблемы, позволяющие разрешить доступ к VSCode SSH sudo, однако я не смог найти хорошего решения.

Если вам нужно настроить файлы сервера в dev, запустите это в командной строке SSH (не VSCode) с привилегиями sudo:

sudo chmod a+rwx /etc/nginx/sites-enabled/default

(или любой другой путь к файлу конфигурации сервера).

Затем вы можете использовать ssh с VSCode и свободно сохранять отредактированный файл.

Если вам не нравится работать в vim через командную строку и вы хотите использовать VSCode для редактирования файлов конфигурации сервера, это может быть самым быстрым решением. Не забудьте вернуть права доступа к файлам только для чтения, когда закончите:

sudo chmod -R 0444 /etc/nginx/sites-available/default

Не совсем отвечаю на ваш вопрос, но тем не менее обходной путь...

У меня такая же проблема в среде исключительно Dev (удаленный Linux-сервер не находится в производственной среде, и у меня есть пароль root). Я работал над этим, подключившись как root, но при этом ограничил, откуда вы можете подключиться как root.

  • Следуйте инструкциям по настройке файла authorized_keys, но выполняйте действия от имени пользователя root, а не вашего пользователя:https://code.visualstudio.com/docs/remote/troubleshooting

  • Отредактируйте (vi) корневой файл authorized_keys, в котором должна быть запись, которая выглядит примерно так:

ssh-rsa ...Lots of text... dev@host

  • Измените запись так, чтобы она гласила:

from="9.8.7.6" ssh-rsa ...Lots of text... dev@host(где 9.8.7.6 - ваша машина разработчика VSCode)

Отредактируйте запись подключения в VSCode, чтобы она выглядела примерно так:

# Read more about SSH config files: https://linux.die.net/man/5/ssh_config Host linuxdev HostName linuxdev.resolvable.fqdn User root

Все вышеперечисленное предполагает, что вы знаете пароль root и что sshd_config уже имеет PermitRootLogin=yes.

Если вы хотите дополнительно ограничить вход в систему SSH root с вашего компьютера VSCode Dev, вы можете установить PermitRootLogin=no глобально в sshd_config и добавьте новое ограничение в sshd_config следующим образом (в конце файла):Match Host 9.8.7.6 PermitRootLogin yes

Затем перезапустите sshd (systemctl restart sshd) для применения нового разрешения SSHD.

Одно решение для Linux, с которым я только что столкнулся, это использовать ( sudo apt install bindfs).

Чтобы разрешить редактирование /etc/nginxчто касается текущего пользователя, работающего в ~/.bind-mounts/nginx:

      mkdir -p ~/.bind-mounts/nginx
sudo bindfs --map=root/${USER}:@root/@$(id -gn) /etc/nginx ~/.bind-mounts/nginx
sudo umount ~/.bind-mounts/nginx # When you're done, or run bindfs with '-f' to keep it in the foreground

bindfsимеет много вариантов. --mapможет быть не лучшим. До сих пор это работало в моем тестировании.

Кажется, все работает так, как вы ожидаете. Позволяет вам «исследовать», и любые модификации будут сделаны так, как если бы вы rootразрешения. Только не забывайте о последствиях для безопасности!

Если вы используете расширение SSH FS VSCode и подключаетесь к AWS EC2 Amazon Linux AMI, то приведенная ниже конфигурация должна позволять вам редактировать файлы и сохранять их с помощьюsudoразрешения:

Файл: settings.json

      "sshfs.configs": [
{
  "name": "your-config-name",
  "host": "your-host-name.compute.amazonaws.com",
  "username": "ec2-user",
  "privateKeyPath": "/path/to/ssh-key-in-ED25519-format.pem",
  "port": 22,
  "debug": false,
  "sftpSudo": true,
  "sftpCommand": "/usr/libexec/openssh/sftp-server"
}
]

Другое возможное значение для ключа json «sftpCommand»: «/usr/lib/openssh/sftp-server».

Зайдите в /etc/ssh/sshd_config и напишите:

PermitRootLogin yes

После этого войдите, используя

ssh root@<Machine_IP>

Я подключаюсь к удаленной машине Ubuntu из локального VSCode с помощью SSH и устанавливаю VSCode внутри машины Ubuntu. Мне удалось создать файлы, но я ничего не могу там записать.

Мне нужно написать файл конфигурации Prometheus, и вот как я дал разрешение на запись:

      sudo chown -R ubuntu /etc/prometheus/prometheus.yml 
      sudo chmod -R 777 folder_name_where_your_file_exists

или

      sudo chmod -R 755 folder_name_where_your_file_exists 

У меня такая же ошибка, но я посмотрел это видео , спасибо, помогите мне.

      sudo chown -R username dictoryname

Другие вопросы по тегам