Используйте переменную окружения в пути SFTP в Paramiko - PullRequest
0 голосов
/ 12 декабря 2018

Я запускаю скрипт на своем сервере и пытаюсь получить некоторые файлы из моего брандмауэра.Я получаю ошибку «файл не найден» при обращении к файлу с использованием переменной среды (знак $).B, но я могу получить свой файл, когда я введу нормальный путь.Я знаю, что код не выглядит хорошо, это всего лишь быстрый пример.Вот мой рабочий код:

_savedLocation = "/home/kartal/Desktop/aaa.tgz"
folder, savedLocation = os.path.split(_savedLocation)
remotepath = "$FWDIR/bin/upgrade_tools/"
remotefile = remotepath + savedLocation
stdin, stdout, stderr =
  ssh.exec_command("cd {} && yes | ./migrate export {} ".format(remotepath, savedLocation))
time.sleep(120)
command = "cd {} && chmod 777 {}".format(remotepath, savedLocation)
stdin, stdout, stderr = ssh.exec_command(command)
sftp = ssh.open_sftp()
sftp.get(remotefile, _savedLocation)
sftp.close()
ssh.close()

Если я использую реальный путь в качестве remotepath = "/opt/r80/fw1/bin/upgrade_tools/", код работает.

Кстати, я запускаю скрипт "migrate" на первом шагес $FWDIR.Так что $FWDIR работает с exec_command, но не в SFTP get.

Где я делаю неправильно и что мне делать?

1 Ответ

0 голосов
/ 12 декабря 2018

Нельзя использовать переменные окружения в SFTP.Вы должны использовать реальные пути.В этом случае реальный путь равен /opt/CPsuite-R80/fw1.

Если реальный путь не является фиксированным, и вам действительно нужно получить реальный путь из значения переменной, вам нужно будет разрешить значение переменной, используя другойинтерфейс (например, с помощью оболочки доступа).А затем используйте разрешенное значение в SFTP.Это то, что вы делаете в WinSCP - вы запускаете cd $FWDIR в оболочке.И оболочка разрешает $FWDIR до /opt/CPsuite-R80/fw1.В Paramiko вы можете использовать SSHClient.exec_command для разрешения переменной:

stdin, stdout, stderr = ssh.exec_command("echo $FWDIR")
fwdir = stdin.read()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...