Как сохранить файл в 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 для перезаписи файла.
Я также столкнулся с той же проблемой при использовании 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