Resposta curta: não tem como
Resposta longa: da sua pergunta, assumo que você está desenvolvendo um script que roda em uma máquina sobre a qual você não tem controle, o usuário dessa máquina, se for suficiente dedicado, conseguirá achar os strings contendo o host do banco e servidor ftp, bem como as senhas relevantes, pois elas estarão de alguma forma armazenadas na máquina. Por mais que você criptografe, em algum lugar (na máquina do usuário) você vai ter que colocar a chave, então basicamente não tem como.
Diante desse tipo de situação, se for absolutamente necessário evitar que o usuário faça esse tipo de acesso direto, provavelmente é uma boa ideia considerar formas alternativas de controle de acesso ao recurso relevante. Eu listaria as seguintes formas:
1) dar usuários e senhas específicas por usuário/instalação, com poderes limitados - relativamente fácil de gerenciar para o FTP, não tão fácil para banco de dados. De antemão, devo alertar que isso não escala muito bem se você tiver muitos usuários diferentes, fica um porre de gerenciar (principalmente conta de BD).
2) "esconder" o FTP e o banco de dados atrás de um webservice, garantindo que tudo que a aplicação vai fazer é "bater" em endereços HTTP com pacotes GET/POST/DELETE/etc que a sua aplicação mandou. Claro, nada impediria o usuário de tentar criar seus próprios pacotes HTTP, mas a ideia é que aí todas as validações e lógicas de negócio estariam implementadas no webservice, que está completamente sob seu controle. Existem várias formas de implementar isso, inclusive frameworks mais ou menos prontos; sugiro pesquisar usando os termos "restful services python" ou coisa parecida.
Pessoal tem como proteger o código do script, na verdade preciso proteger a senha de banco e servidores ftp que estão dentro do meu código.
Alguma dica?